返回volatile变量的函数是否需要同步?

Mic*_*yes 5 java volatile

setGameState()并且getGameState()可以从不同的线程调用.m_gameState是不稳定的,所以它的值/变化可能对其他线程可见.

问题: 函数是否需要synchronized变量或变量是否足够?

private volatile EGameState m_gameState;

public void setGameState(EGameState a_gameState) {
   m_gameState = a_gameState;
}

public EGameState getGameState() {
   return m_gameState;
}
Run Code Online (Sandbox Code Playgroud)

小智 2

对 volatile 变量的访问就像它本身是同步的一样。

访问 volatile 变量永远不会持有锁,它不适合我们想要将读-更新-写作为原子操作的情况。这里需要使用同步块。

对于其他情况,如果您不使用同步(如正常的获取和设置)就足够了