我正在制作一个应用程序,它需要一堆日记帐分录并计算总和。
当有多个线程调用该addToSum()
方法时,以下方法是线程/并发安全的。我想确保每次通话都能正确更新总数。
如果不安全,请解释我必须做什么来确保线程安全。
我需要synchronize
获取/放置还是有更好的方法?
private ConcurrentHashMap<String, BigDecimal> sumByAccount;
public void addToSum(String account, BigDecimal amount){
BigDecimal newSum = sumByAccount.get(account).add(amount);
sumByAccount.put(account, newSum);
}
非常感谢!
更新:
谢谢大家的回答,我已经知道上面的代码不是线程安全的。
感谢 Vint 建议AtomicReference
将synchronize
. 我以前AtomicInteger
用来保存整数和,我想知道 BigDecimal 是否有类似的东西。
关于两者的利弊,是否有明确的结论?