小编Des*_*hou的帖子

如何在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);
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

更新:

谢谢大家的答案,我已经知道上面的代码不是线程安全的.

感谢Vint建议AtomicReference作为替代品synchronize.之前我AtomicInteger用来保存整数和,我想知道BigDecimal是否有类似的东西.

关于两者的赞成和反对,这是一个明确的结论吗?

java concurrency thread-safety bigdecimal concurrent-collections

16
推荐指数
1
解决办法
6038
查看次数

如何快速从Amazon SQS(简单队列服务)队列中删除事件?

假设我有几百万的事件,在SQS队列,我希望尽快摆脱他们,但我不能只删除队列,使一个新的.

从队列中删除/排除这些事件的最快方法是什么?

scalability message-queue amazon-sqs amazon-web-services

7
推荐指数
1
解决办法
1029
查看次数