java - 如果使用不同的对象进行同步,更改对不同的线程是否可见?

标签 java multithreading synchronization locking

想象一下类中的这段代码。我们尝试分别调用 method1method2 的不同线程中更改 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/

相关文章:

android - Solcalendar,与 Owncloud 同步

在 Weka 中以编程方式使用 LibSVM 的 java 类路径错误

java - AtomicInteger 不从主内存读取值以进行非 volatile 可变引用

java - 在单个后台线程定期修改 map 的同时读取 map

java - 如何使编写方法线程安全?

c++ - 汇编代码是否试图到达相同的寄存器,在不同的线程中损坏任何东西?

linux - 持有信号量的代码可以被抢占是什么意思

python - python中的公平信号量

java - 如果未显式声明 Transformer,hibernate 如何与 HQL 查询一起使用

java - VirusTotal HTTPS 连接 Java