【发布时间】:2016-07-16 14:54:57
【问题描述】:
我想使用并发散列映射来保存一些结果,
ConcurrentHashMap<Long,AtomicInteger>
如果key不存在,则添加一个新条目,或者通过key获取值并递增,如下所示:
if(map.contains(key))
map.get(key).addAndGet(1);
else
map.put(key,new AtomicInteger(1));
put 操作不安全,如何解决这个问题? put 操作应该在同步块内吗?
【问题讨论】:
-
这不仅仅是 put 操作 - 显示的整个条件块必须在同步块中。或者,您可以使用
putIfAbsent。 -
使用 putIfAbsent 似乎更简单。我在同步块中使用了双重检查,而不是在整个条件块中使用。
标签: java multithreading java.util.concurrent