本文讨论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() 上的“同步”不能阻止上面的粗体线?