Java:使用锁时所有可变变量都需要是易失性的吗?

Dav*_*rks 5 java concurrency locking volatile synchronized

下面的变量 x 是否需要是易失性的?

或者 utils.concurrent 锁中的操作是否执行与同步块相同的功能(确保将其写入内存,而不是存储在 CPU 缓存中)?

myMethod(){
  myLock.lock();
  x++;
  myLock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

Bre*_*ail 4

仅当这些变量在没有锁的情况下在其他地方访问时,它们才需要是易失性的。例如,作为对大小变量的快速只读访问。锁定方法确实具有与同步块相同的目的。请参阅Lock类的 javadoc 中的“内存同步”部分。