微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java映射并发更新

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

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

原文地址:https://www.jb51.cc/java/121671.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐