更高效的多线程可能吗?

时间:2016-02-18 15:01:59

标签: java multithreading concurrency concurrenthashmap

我有一个Concurrent Hash Map,我需要在循环中更新值。 虽然,并发映射本身是线程安全的,但添加操作不是原子的,因此我需要添加synchronized块。如果我在这里错了,请纠正我。

问题是如果使用锁等可以更有效地同步此代码?我从阻塞队列中获取值。

以下是代码:

Genymotion

1 个答案:

答案 0 :(得分:3)

您可以使用ConcurrentHashMap.computeIfAbsentAtomicInteger值来实现您的计数器地图,而无需在整个地图上进行同步:

ConcurrentHashMap<String,AtomicInteger> map = new ConcurrentHashMap<>();

String key = ...
map.computeIfAbsent(key, k -> new AtomicInteger()).incrementAndGet();