[英]Is “ConcurrentHashMap.putAll(…)” atomic?
方法ConcurrentHashMap.putAll(Map)应该是原子的吗?
我在文档中找不到它,并且在ConcurrentMap界面中没有提到它,所以我猜答案是否定的。 我要求它确定,因为如果该操作不是原子的,那就没有意义。
如果它不是原子的,那么支持多个项目的原子插入的最佳方法是什么? 回到好老同步?
这不是原子的,不是。 根据课程文件 :
对于诸如
putAll
和clear
类的聚合操作,并发检索可能反映仅插入或删除某些条目。
要使其原子化,你必须使用synchronized
,yes。 没有非阻塞的方法来做到这一点。
在文档的顶部
对于诸如
putAll
和clear
类的聚合操作,并发检索可能反映仅插入或删除某些条目。
要使其原子化,你必须使用synchronized,yes
不仅如此:您必须在每个公共映射方法周围放置一个synchronized块,从而降低并发性。
putAll()
不是原子的,而只是保证每个put()
都是原子的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.