Tag: concurrent collections

如何在ConcurrentHashMap线程安全的情况下更新BigDecimal

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