这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