次のコードがあります。
public class Simulation
{
public static volatile boolean IS_EVEN_TICK;
}
そして別の(実行可能な)クラスの以下:
public void run()
{
while (true)
{
// flip the "even/uneven tick" switch
Simulation.IS_EVEN_TICK = !Simulation.IS_EVEN_TICK;
}
}
Simulation.IS_EVEN_TICK への書き込みはその変数の現在の値に依存するため、私が理解している限り、これは一般にスレッドセーフではありません。ただし、このスレッドは変数に書き込む唯一のスレッドであり、他のすべてのスレッドは変数を読み取るだけです (変数にアクセスした場合)。
変数は、すべてのスレッドが正しい値を読み取るのに十分な揮発性がありますか?それにもかかわらず、変数へのアクセスを同期する必要がありますか?