1

想象一下类中的这段代码。我们试图val在不同的线程中分别调用method1和来改变值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;
    }
}
4

1 回答 1

1

获取和释放不同的监视器之间没有发生之前的关系,因此无法保证更改何时可见。

于 2013-10-06T20:26:59.943 回答