我有一个Concurrent Hash Map,我需要在循环中更新值。 虽然,并发映射本身是线程安全的,但添加操作不是原子的,因此我需要添加synchronized块。如果我在这里错了,请纠正我。
问题是如果使用锁等可以更有效地同步此代码?我从阻塞队列中获取值。
以下是代码:
Genymotion
答案 0 :(得分:3)
您可以使用ConcurrentHashMap.computeIfAbsent
和AtomicInteger
值来实现您的计数器地图,而无需在整个地图上进行同步:
ConcurrentHashMap<String,AtomicInteger> map = new ConcurrentHashMap<>();
String key = ...
map.computeIfAbsent(key, k -> new AtomicInteger()).incrementAndGet();