想象一下类中的这段代码。我们尝试分别调用 method1
和 method2
的不同线程中更改 val
值。
如果我们使用不同的对象进行同步,对 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;
}
}
最佳答案
获取和释放不同监视器之间没有发生之前的关系,因此无法保证更改何时可见。
关于java - 如果使用不同的对象进行同步,更改对不同的线程是否可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213161/