gpt4 book ai didi

java - 自动整数线程澄清

转载 作者:行者123 更新时间:2023-12-01 19:33:57 25 4
gpt4 key购买 nike

我有以下代码,

private final Map<String, AtomicInteger> wordCounter = new ConcurrentHashMap<>();

AtomicInteger count = wordCounter.get(word);
if (count == null) {
if ((count = wordCounter.putIfAbsent(word, new AtomicInteger(1))) == null) {
continue;
}
}
count.incrementAndGet();

我正在 IF 条件下检查 count == null。据我所知,AutomicInteger 中的操作是线程安全的。是否有必要使用其中一种锁定机制来锁定 count 实例?

最佳答案

上面的代码无需任何额外的锁定即可工作,但可以简化为以下惯用形式

// If word doesn't exist, create a new atomic integer, otherwise return the existing
wordCounter.computeIfAbsent(word, k -> new AtomicInteger(0))
.incrementAndGet(); // increment it

您的代码看起来有点像 double checked locking ,因为 putIfAbsent() 在空检查之后使用,以避免覆盖可能由另一个线程放在那里的值。然而,该路径会创建一个额外的 AtomicInteger,而 DCL 不会发生这种情况。额外的对象可能并不重要,但它确实使解决方案变得不那么“纯粹”。

关于java - 自动整数线程澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501447/

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