この記事では、Java の「同期」キーワードについて説明します。
...
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() の「同期」が上記の太字の行を妨げないのはなぜですか?