ConcurrentHashMap.putAll(Map)方法应该是原子的吗?
我在文档中找不到它,并且在ConcurrentMap界面中没有提到它,所以我猜答案是否定的。我要求它确定,因为如果该操作不诚实,那就没有意义了。
如果它不是原子的,那么支持多个项目的原子插入的最佳方法是什么?回到好老同步?
答案 0 :(得分:10)
这不是原子的,不是。根据{{3}}:
对于
putAll
和clear
等聚合操作,并发检索可能反映仅插入或删除某些条目。
要将其原子化,您必须使用synchronized
,是的。没有非阻塞方法可以做到这一点。
答案 1 :(得分:3)
位于the doc
的顶部对于
putAll
和clear
等聚合操作,并发 检索可能反映只插入或删除一些条目。
答案 2 :(得分:2)
putAll()
不是原子的,只是保证每个put()
都是原子的。
答案 3 :(得分:2)
要使其原子化,您必须使用synchronized,yes
不仅如此:你必须在每个公共映射方法周围放置一个synchronized块,从而降低并发性。