“ConcurrentHashMap.putAll(...)”是原子的吗?

时间:2011-12-14 23:35:02

标签: java atomic concurrenthashmap

ConcurrentHashMap.putAll(Map)方法应该是原子的吗?

我在文档中找不到它,并且在ConcurrentMap界面中没有提到它,所以我猜答案是否定的。我要求它确定,因为如果该操作不诚实,那就没有意义了。

如果它不是原子的,那么支持多个项目的原子插入的最佳方法是什么?回到好老同步?

4 个答案:

答案 0 :(得分:10)

这不是原子的,不是。根据{{​​3}}:

  

对于putAllclear等聚合操作,并发检索可能反映仅插入或删除某些条目。

要将其原子化,您必须使用synchronized,是的。没有非阻塞方法可以做到这一点。

答案 1 :(得分:3)

位于the doc

的顶部
  

对于putAllclear等聚合操作,并发   检索可能反映只插入或删除一些条目。

答案 2 :(得分:2)

putAll()不是原子的,只是保证每个put()都是原子的。

答案 3 :(得分:2)

  

要使其原子化,您必须使用synchronized,yes

不仅如此:你必须在每个公共映射方法周围放置一个synchronized块,从而降低并发性。