易失性变量和同步块的使用

时间:2014-11-24 18:14:02

标签: java

说一个易变的原语是正确的:

1)需要非原子操作的同步 2)不需要原子操作的同步,如下所示:

volatile bool selector;
selector = true;

2 个答案:

答案 0 :(得分:1)

如果您只是重新分配volatile变量,则不应要求同步。这就是他们背后的想法。

实际上,在这种情况下,它甚至不必是易失性的,因为新值true不依赖于selector的旧值所以如果它已经是无关紧要的由另一个线程改变。

答案 1 :(得分:1)

根据Oracle Java documentation

  

对于声明为volatile的所有变量,读取和写入都是原子的   (包括长变量和双变量)。

使用volatile声明的值/目的与使用synchronize块相同。所以不,您不需要同步访问易失性变量

就两者之间的权衡而言,同样的文件说:

  

使用简单的原子变量访问比访问更有效   这些变量通过同步代码,但需要更多的关注   程序员避免内存一致性错误。是否额外   努力是值得的,取决于的大小和复杂性   应用