gpt4 book ai didi

java - ConcurrentHashMap 原子获取、增量和替换

转载 作者:行者123 更新时间:2023-11-30 08:08:05 25 4
gpt4 key购买 nike

是否有一种简单的方法可以从 ConcurrentHashMap 中获取、递增和替换整数?

ConcurrentHashMap<MyResource, AtomicInteger> map;

假设每个值都已经像这样初始化:

map.get(i) = new AtomicInteger(0);

并且我们不会添加任何新 key 。

如何进行获取、递增和替换原子操作(且线程安全)?

像这样的东西不应该工作:

map.get(myResourceKey).incrementAndGet();

因为 2 个线程在递增之前可以获得相同的整数,对吧?

该映射正在跟踪有多少线程正在使用特定资源。我希望仅在未使用资源时(计数器 = 0)发生某些事情。

最佳答案

您可以使用计算来执行您所要求的原子操作。计算方法将返回递增的值,如果是第一次调用,则返回 1。

Map<MyResource, Integer> map = new ConcurrentHashMap<>();

map.compute(resourceKey, (k, v) -> v == null ? 1 : v + 1);

关于java - ConcurrentHashMap 原子获取、增量和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803570/

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