即使两个线程不同时读写,我还需要同步吗?

时间:2017-04-27 19:25:16

标签: java multithreading synchronization volatile atomicity

在Java程序中,假设一个线程(例如,T1)正在写入一个变量,而另一个线程(比如T2)正在读取同一个变量,但不能同时读取。所以,当我知道T2只有在写完T1后才能读取(如何完成另一个问题),我还需要将该变量声明为volatile / synchron it /使用AtomicReference吗?

我想T2会在少数情况下最终读取陈旧价值的可能性最小?

1 个答案:

答案 0 :(得分:1)

这取决于如何确保只有在写入T1后才能读取T2。如果在写入和读取之间有恰当的先发生关系,则操作是安全的。

有关详细信息,请参阅chapter 17.4 of the Java 7 specification(或较新文档中的相应部分)。 Happens-before是传递性的

  

如果动作x与后续动作y同步,那么我们也有hb(x,y)。

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