私は以下のコードを持っています
class VolatileCount {
volatile int count;
Object lock = new Object();
public void increment() {
synchronized (lock) {
count = count + 1;
}
System.out.print(" " + count);
}
}
複数のスレッドから同じオブジェクトを呼び出すとincrement()
、次の出力が得られます (マシンによって異なる場合があります)。
2 3 2 5 4 8 8 6 11 13 10 9 15 14 12 20 19
最初の 3 つの数値(2 3 2) を考慮すると、スレッドが 3 を認識した場合、インクリメントが発生し、変数が揮発性であるため、その値は 3 以上である必要がありますが、どのスレッドでも 2 にすることはできません。
ただ、ここで印刷行が並び替えられているようですが、その行を並び替えて正しいでしょうか?ここで何が欠けていますか?私はJDK 7(Eclipse)で実行しています