gpt4 book ai didi

java - 即使两个线程不同时读写,我是否也需要同步?

转载 作者:行者123 更新时间:2023-12-02 13:19:00 25 4
gpt4 key购买 nike

在 Java 程序中,假设一个变量正在由一个线程(例如 T1)写入,并且同一变量正在由另一个线程(例如 T2)读取,但不同时进行。因此,当我知道 T2 仅在 T1 写入后才会读取(如何完成是另一回事)时,我是否还需要将该变量声明为 volatile/同步它/使用 AtomicReference?

我猜 T2 在少数情况下最终读取过时值的可能性很小?

最佳答案

这取决于您如何确保 T2 仅在 T1 写入后才读取。如果写入和读取之间存在正确的happens-before关系,则操作是安全的。 p>

引用chapter 17.4 of the Java 7 specification (或较新文档中的相应部分)了解详细信息。 Happens-before 是传递性的并且

If an action x synchronizes-with a following action y, then we also have hb(x, y).

也就是说,如果您有一个独立的同步原语,确保读取之后和写入之前发生发生之前的关系,那么您的读取就是安全的。

关于java - 即使两个线程不同时读写,我是否也需要同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43666359/

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