一尘不染

Java中的易变变量

java

因此,我正在阅读《 实践 中的 Java并发性》 这本书,而我只能停留在这一解释上,没有一个例子,我似乎无法理解。这是报价:

当线程A将数据写入易失性变量,然后线程B 读取同一变量时,在A写入易失性变量之前可见的所有变量的值 将B在读取易失性变量后变为可见。

有人可以给我一个反例的原因,为什么“在A写入易失性变量之前可见的所有变量的值在B读取易失性变量之后就变得可见”?

我很困惑,为什么B在读取易失性变量之前所有其他非易失性变量都不可见?


阅读 377

收藏
2020-09-08

共1个答案

一尘不染

线程B可能具有这些变量的CPU本地缓存。读取volatile变量可确保观察到从先前对volatile的任何中间刷新。

例如,请阅读以下链接,该链接以“使用易失性修复双重检查锁定”结尾:

http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

2020-09-08