gpt4 book ai didi

java - wait()方法对java同步块(synchronized block)中线程的影响

转载 作者:行者123 更新时间:2023-12-05 03:20:46 24 4
gpt4 key购买 nike

synchronized (lockObject) {
// update some value of the common shared resource
lockObject.wait();
}

在调用wait()方法时,线程会释放锁,我想知道释放锁后是否也更新了共享资源对象主存中的值,还是只更新了之后的值同步块(synchronized block)的执行。

最佳答案

认为由于同步(例如 synchronized 或 volatile)数据需要写入主存是一种谬论。由于缓存一致性协议(protocol),现代 CPU 上的 CPU 缓存始终保持一致。

object.wait 导致线程释放锁。一旦另一个线程发送通知,就会重新获取锁。 object.wait 在 Java 内存模型中没有语义;只有获取和释放锁是相关的。

因此在您的特定情况下,如果线程等待,它会触发锁定释放。如果另一个线程在获取同一个锁后读取该状态,那么在释放锁的线程(由于等待)和获取锁的线程之间存在一个 happens-before 边缘。因此,第二个线程可以保证看到第一个线程的更改。

关于java - wait()方法对java同步块(synchronized block)中线程的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73087640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com