gpt4 book ai didi

java - 以原子方式更新两个 ConcurrentHashMap

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

Map<String,Integer> m1 = new ConcurrentHashMap<>();
Map<String,Integer> m2 = new ConcurrentHashMap<>();
public void update(int i) {
m1.put("key", i);
m2.put("key", i);
}

在上面的虚拟代码中,对 m1 和 m2 的更新不是原子的。如果我尝试同步此 block ,findBugs 会提示“在 util.concurrent 实例上执行同步”

除了不使用并发集合并显式执行所有同步之外,是否有推荐的方法来执行此操作。

顺便说一句,我也不知道在显式同步中包装并发集合的确切含义。

最佳答案

如果意图是对于一个键,两个映射总是检索相同的值,那么使用两个不同的并发映射的设计是有缺陷的。即使同步写入,读取线程仍然可以在写入时访问这两个映射。这可能就是 FindBugs 规则试图捕获的内容。

有两种方法可以解决这个问题,要么使用显式同步(即两个具有同步读取和写入的常规映射),要么使用仅一个并发映射和放入一个值对象中,保存两个 int。

关于java - 以原子方式更新两个 ConcurrentHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109127/

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