Javaの++演算子はアトミックじゃない。つまり、++nは、n = n + 1と分解されたとき、nを読み込んだ後、1足した値をnに書き込む前に他のスレッドがnを変更していたら、すでに他のスレッドで行っていた変更が無効になる。 で、これはvolatileをつけてもだめ。 つまり、このプログラムの実行結果が20000にならない。 public class NonAtomicIncrement { static int count; public static void main(String[] args) throws InterruptedException{ Thread t = new Thread(){ @Override public void run(){ for(int i = 0; i < 10000; ++i){ ++count; } } }; t.start(); for