這article談到Java的「synchronized」關鍵字。Java線程「同步」
...
private int foo;
public synchronized int getFoo() { return foo; }
public synchronized void setFoo(int f) { foo = f; }
如果主叫方希望增加foo的屬性,下面的代碼,這樣做是不是線程安全的:
...
setFoo(getFoo() + 1);
如果兩個線程試圖在同一時間遞增foo,那麼結果可能是foo的價值根據時間而增加1或2。
現在,我的問題:
上setFoo爲什麼不 「同步」()防止上述粗體 線?
'然後他們每個人都加一個並調用setFoo,最終的結果是foo只增加一次,而不是兩次。爲什麼? – 2013-02-27 18:15:07
因爲每個線程都將'foo'更新爲相同的值。例如,他們每個人都得到值2,他們每個人都加1得到3,然後他們每個人都將值設置爲3. – rgettman 2013-02-27 18:19:43
如果我理解正確,那麼你的陳述不應該是'那麼他們每個人都添加一個並調用setFoo,最終結果是foo獲得**兩次** **?' – 2013-02-27 18:45:18