gpt4 book ai didi

java - 添加到 ConcurrentHashMap 中的 AtomicInteger

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

我定义了以下内容

private ConcurrentMap<Integer, AtomicInteger>  = new ConcurrentHashMap<Integer, AtomicInteger>();

private void add() {
staffValues.replace(100, staffValues.get(100), new AtomicInteger(staffValues.get(100).addAndGet(200)));
}

经过测试,我得到的值不是预期的,我认为这里存在竞争条件。有谁知道通过将 get 调用包装在替换函数中是否会被认为是线程安全的?

最佳答案

处理此类情况的一个好方法是使用 computeIfAbsent方法(不是@the8472推荐的compute方法)

computeIfAbsent 接受 2 个参数、键和 Function<K, V>仅当现有值丢失时才会被调用。由于 AtomicInteger 是线程安全的,可以从多个线程递增,因此您可以通过以下方式轻松使用它:

staffValues.computeIfAbsent(100, k -> new AtomicInteger(0)).addAndGet(200);

关于java - 添加到 ConcurrentHashMap 中的 AtomicInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821040/

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