gpt4 book ai didi

java - 我可以将ConcurrentHashMap与Integer一起用于线程安全计数器吗?

转载 作者:行者123 更新时间:2023-12-03 13:16:50 29 4
gpt4 key购买 nike

我想有几个柜台,我可以按名称处理。因此,我可以通过以下方式实现它:

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.computeIfAbsent("key", k -> new Integer(0));
map.computeIfPresent("key", (k, v) -> v + 1);

它是代码安全的线程吗?

我想是这样,因为由于 ConcurrentHashMap,我们已经进行了同步访问,并且设置新的引用也是线程安全的操作。由于安全发布,其他线程将看到这种变化,这是在我们将桶锁保留在 ConcurrentHashMap中时发生的。

最佳答案

假设第一个语句map.computeIfAbsent("key", k -> new Integer(0));发生在“初始化时间”,然后有一堆线程执行map.computeIfPresent("key", (k, v) -> v + 1);形式的调用,是的,该算法将是正确的(我是否很好地理解了你的意图?)。

JDK的最新版本保证对ConcurrentHashMap.computeIfPresent()的调用不仅会调用以线程安全的方式传递的表达式,而且还可以保证,如果其他线程尝试同时作用于相同的键,它们将被阻塞并排入队列,以便所有突变都按顺序发生(在分布式系统中,这称为可序列化性)。

关于java - 我可以将ConcurrentHashMap与Integer一起用于线程安全计数器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493461/

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