java映射并发更新

前端之家收集整理的这篇文章主要介绍了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.f2er.com/java/121671.html

猜你在找的Java相关文章