【发布时间】:2011-11-25 05:32:00
【问题描述】:
我想在 Java 中做这样的事情
public void giveMoney(String userId, int money) {
synchronized (userId) {
Profile p = fetchProfileFromDB(userId);
p.setMoney(p.getMoney() + userId);
saveProfileToDB(p);
}
}
当然,在字符串上同步是不正确的。这样做的正确方法是什么?
【问题讨论】:
-
是否有无法在
Profile上同步的原因? -
我很想知道为什么在字符串上同步不正确..
-
@Jim 它是为每个请求新创建的。
-
@mrkhrts
synchronized使用对象标识。一个字符串可以有多个副本,其标识不同但内容相同。
标签: java thread-safety synchronized