加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java映射并发更新

发布时间:2020-12-14 05:42:17 所属栏目:Java 来源:网络整理
导读:我正在尝试用int值创建一个Map,并通过多个线程增加它们.两个或多个线程可能会增加相同的密钥. ConcurrentHashMap文档对我来说非常不清楚,因为它是: 检索操作(包括get)一般不阻止,所以可能与更新操作重叠(包括put和remove) 我想知道以下使用ConcurrentHashMa
我正在尝试用int值创建一个Map,并通过多个线程增加它们.两个或多个线程可能会增加相同的密钥.

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.只有当您要修改地图本身而不是其内容时,才需要并发地图.即使是最简单的HashMap是threadsafe for concurrent reads,给定地图不再突变了.

因此,您不需要为原始类型提供线程安全的映射,因此您需要该类型的线程安全包装.从java.util.concurrent.atomic中的任何东西,或者如果需要任意类型,请滚动自己的锁定的容器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读