更高效的多线程可能吗?

More efficient multi threading possible?

我有一个并发哈希映射,我需要在其中循环更新值。 虽然,并发映射本身是线程安全的,但添加操作不是原子的,因此我需要添加同步块。此处如有错误请指正

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

代码如下:

// running in a loop

String i =  (String) queue.take();

synchronized(this) {
    if(hashmap.containsKey(i)) {

        hashmap.put(i, hashmap.get(i) + 1);

    } else {    
        hashmap.put(i, 1);      
    }
}

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

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

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