同步

来源:互联网 发布:剑雨江湖进阶数据灵武 编辑:程序博客网 时间:2024/05/16 18:00
package comm;class Res {    String name;    String sex;}class Input implements Runnable {    private Res r;    public Input(Res r) {        this.r = r;    }    public void run() {        int x = 0;        while (true) {            synchronized (r) {  //注意,两个线程加的锁应该是一样的,否则依然不同步,                if (x == 0) {                    r.name = "mike";                    r.sex = "man";                } else {                    r.name = "丽丽";                    r.sex = "女女女";                }                x = (x + 1) % 2;            }        }    }}class Output implements Runnable {    private Res r;    public Output(Res r) {        this.r = r;    }    public void run() {        while (true)            synchronized (r) {                System.out.println(r.name + " , " + r.sex);            }    }}public class InputOutoutDemo {    public static void main(String[] args) {        Res r = new Res();        Input in = new Input(r);        Output out = new Output(r);        Thread t1 = new Thread(in);        Thread t2 = new Thread(out);        t1.start();        t2.start();    }}

加的同步锁是Res r,确保两个线程的锁是同一个。

可能的输出结果是

mike , manmike , manmike , manmike , manmike , manmike , manmike , manmike , manmike , manmike , man丽丽 , 女女女丽丽 , 女女女丽丽 , 女女女丽丽 , 女女女

虽然输出没有出现不同步现象,但是并不是期望中的mike , man丽丽 , 女女女 交替出现。

0 0
原创粉丝点击