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中的任何东西,或者如果需要任意类型,请滚动自己的锁定的容器.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...