Java 易失性修饰符和同步块

由多个线程访问但仅在同步块内部访问的变量是否需要易失性修饰符?如果不是,为什么?


答案 1

您不需要使用 内部,同步已保证在一致使用时(在每次访问时)变量的本地缓存的正确行为。volatilesynchronized

volatile适用于基元值,并且可以成为对基元类型进行原子访问的一个很好的快捷方式。请注意,在 JDK 5 中,易失性的行为已从 1.4 发生了变化。

更多信息可以在这里找到


答案 2

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

有关详细信息,请参阅此从易失性到同步的比较(含讨论)。