在ConcurrentHashMap中原子递增计数器。
在ConcurrentHashMap中原子递增计数器。
我想从网络应用的不同地方收集一些指标数据。为了保持简单,所有这些数据都是计数器,因此唯一的修改器操作是将它们增加1。
增量操作将是并发的,并且经常发生。读取(转储统计信息)是一项罕见的操作。
我想使用ConcurrentHashMap。问题在于如何正确递增计数器。由于该映射表没有“递增”操作,我需要先读取当前值,然后将其递增并将新值放入映射表中。如果没有更多的代码,这不是一个原子操作。
有没有可能在不同步的情况下实现这一点(这将使ConcurrentHashMap失效)?我需要看看Guava吗?
感谢任何提示。
P.S.
SO上有一个相关问题(最有效的Java地图值递增方式),但重点在于性能而不是多线程
更新
对于通过相同主题的搜索到达此处的人们:除了下面的答案之外,还有一个有用的演示文稿,恰好涵盖了同一主题。请参见幻灯片24-33。
admin 更改状态以发布 2023年5月22日