Java volatile修饰符和synchronized块

Chr*_*s B 15 java multithreading volatile synchronized

多个线程访问但仅在同步块内访问的变量是否需要volatile修饰符?如果没有,为什么?

Yan*_*min 12

您不需要在volatile内部使用synchronized,synchronized已经保证了在一致使用时(每次访问时)本地缓存变量的正确行为.

volatile适用于原始值,并且可以是原始类型的原子访问的一个很好的快捷方式.请注意,volatile的行为在JDK 5中已从1.4更改.

更多信息可以在这里找到


Ree*_*sey 5

不会。当您在同步块中工作时,所有缓存的变量在访问时都会同步,因为它会创建内存屏障。

有关详细信息,请参阅易失性 与同步的比较(带讨论)。