如果使用不同的对象进行同步,是否会对其他线程显示更改?

时间:2013-10-06 19:45:34

标签: java multithreading synchronization locking

想象一下这个代码片段。我们正尝试在分别调用valmethod1的不同主题中更改method2值。

如果我们使用不同的对象进行同步,是否可以在另一个线程中看到对val所做的更改?什么是设计好的测试用例?

private Object lock1 = new Object();
private Object lock2 = new Object();
private int val = 0;

public void method1 () {
    synchronized (lock1) {
       System.out.println(val);
       val = 1;
    }
}

public void method2 () {
    synchronized (lock2) {
       System.out.println(val);
       val = 2;
    }
}

1 个答案:

答案 0 :(得分:1)

获取和发布不同的监视器之间没有发生过 - 之前的关系,因此无法保证何时可以看到更改。