以下引用来自this tutorial。
我无法理解段落的最后一行(我已经应用了粗体字体)。 代码的副作用是什么意思?
原子操作不能交错,因此可以使用它们而不用担心线程干扰。但是,这并不能消除所有同步原子操作的需要,因为仍然可能存在内存一致性错误。使用volatile变量可降低内存一致性错误的风险,因为对volatile变量的任何写入都会建立与之后读取同一变量的先发生关系。这意味着对volatile变量的更改始终对其他线程可见。更重要的是,这也意味着当一个线程读取一个volatile变量时,它不仅会看到volatile的最新变化,还会看到导致变化的代码的副作用。
答案 0 :(得分:3)
"副作用"这意味着线程更新了自己堆栈之外的一些内存位置。基本上这意味着它改变了堆上某个对象的状态。
确保volatile
字段正确发布的同步机制也会导致(作为副作用,hihi)同样保证另一个线程在更新该字段之前所执行的任何内存写入。< / p>
答案 1 :(得分:1)
副作用仅指某种状态的修改 - 例如:
因此在最后一行中,线程会看到由代码的副作用引起的状态变化,而不仅仅是正在读取的volatile变量的副作用。