如何使在 ConcurrentHashMap 线程中更新 BigDecimal 是安全的
我正在制作一个应用程序,该应用程序需要一堆日记帐分录并计算总和。
下面的方式是线程/并发安全,当有多个线程调用该方法时。我想确保每个呼叫都正确更新总数。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 建议作为 .我以前用来保存整数和,我想知道BigDecimal是否有类似的东西。AtomicReference
synchronize
AtomicInteger
关于两者的利弊是一个明确的结论吗?