gpt4 book ai didi

java map并发更新

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:12 24 4
gpt4 key购买 nike

我正在尝试使用 int 值创建一个 Map 并通过多个线程增加它们。两个或更多线程可能会增加相同的 key 。

ConcurrentHashMap 文档对我来说非常不清楚,因为它说:

检索操作(包括 get)一般不会阻塞,因此可能与更新操作(包括 put 和 remove)重叠

我想知道以下使用 ConcurrentHashMap 的代码是否能正确:

myMap.put(X, myMap.get(X) + 1);

如果没有,我该如何管理这样的事情?

最佳答案

并发映射无助于代码的线程安全。你仍然可以获得竞争条件:

Thread-1: x = 1, get(x)
Thread-2: x = 1, get(x)
Thread-1: put(x + 1) => 2
Thread-2: put(x + 1) => 2

发生了两次增量,但您仍然只得到 +1。仅当您打算修改 map 本身而不是其内容时,才需要并发 map 。即使是最简单的HashMapthreadsafe for concurrent reads ,假设 map 不再发生变化。

因此,您需要该类型的线程安全包装器,而不是基本类型的线程安全映射。来自 java.util.concurrent.atomic 的内容,或者如果需要任意类型,则滚动您自己的锁定容器。

关于java map并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141292/

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