volatile varible的内存一致性错误?

时间:2017-10-27 17:46:58

标签: java concurrency synchronized

据说可以使用volatile变量来实现同步。但是,volatile变量仍然容易受到内存一致性错误的影响。为什么会这样?

2 个答案:

答案 0 :(得分:1)

易失性与同步无关。

易失性变量降低了内存一致性错误的风险,因为对volatile变量的任何写入都会建立与之后读取同一变量的先发生关系。

Here is the link to JavaDoc

答案 1 :(得分:0)

易失性变量本身不受内存一致性错误的影响。 volatile变量建立内存屏障并尊重关系之前发生的事情,因此write被刷新到主内存,因此读取是一致的。 操作需要原子

假设我是int。

i=10没问题

i++不是原子的,它相当于读取递增它然后推送它的当前值。

对于boolean变量,唯一合理的操作是赋值,因此可以一致地使用它们。

再次操作需要原子