このarticleは、Javaの "synchronized"キーワードについて語ります。Javaスレッド "synchronized"
...
private int foo;
public synchronized int getFoo() { return foo; }
public synchronized void setFoo(int f) { foo = f; }
呼び出し側がfooプロパティをインクリメントしたい場合は、そうするために、次のコードは、スレッドセーフではありません。
...
setFoo(getFoo() + 1);
2つのスレッドが同時にFOOをインクリメントしようとすると、結果は、fooの値がタイミングに応じて1つまたは2つ増加することがあります。今
、私の質問:
なぜsetFooに "同期" しません()上記の太字 ラインを防ぎますか?
'それから、それぞれが1つ追加されてsetFooが呼び出され、最終結果はfooが2回ではなく1回だけインクリメントされるということです。 –
それぞれのスレッドは 'foo'を同じ値に更新するためです。例えば、それぞれが値2を取得し、それぞれが1を加えて3を取得し、それぞれが値を3に設定します。 – rgettman
私が正しく理解していれば、 setFooを呼び出すと、結果はfooが2回インクリメントされます** ** ' –