"副作用究竟是什么意思"代码?

时间:2016-02-09 05:13:34

标签: java multithreading concurrency atomic volatile

以下引用来自this tutorial

我无法理解段落的最后一行(我已经应用了粗体字体)。 代码的副作用是什么意思?

  

原子操作不能交错,因此可以使用它们而不用担心线程干扰。但是,这并不能消除所有同步原子操作的需要,因为仍然可能存在内存一致性错误。使用volatile变量可降低内存一致性错误的风险,因为对volatile变量的任何写入都会建立与之后读取同一变量的先发生关系。这意味着对volatile变量的更改始终对其他线程可见。更重要的是,这也意味着当一个线程读取一个volatile变量时,它不仅会看到volatile的最新变化,还会看到导致变化的代码的副作用。

2 个答案:

答案 0 :(得分:3)

"副作用"这意味着线程更新了自己堆栈之外的一些内存位置。基本上这意味着它改变了堆上某个对象的状态。

确保volatile字段正确发布的同步机制也会导致(作为副作用,hihi)同样保证另一个线程在更新该字段之前所执行的任何内存写入。< / p>

答案 1 :(得分:1)

副作用仅指某种状态的修改 - 例如:

  • 更改变量的值;
  • 将一些数据写入磁盘;
  • 启用或禁用用户界面中的按钮。

因此在最后一行中,线程会看到由代码的副作用引起的状态变化,而不仅仅是正在读取的volatile变量的副作用。