gpt4 book ai didi

java - 更高效的多线程可能吗?

转载 作者:行者123 更新时间:2023-12-01 21:48:59 24 4
gpt4 key购买 nike

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

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

这是代码:

// 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();

关于java - 更高效的多线程可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35484981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com