Search code examples
javaatomicconcurrenthashmap

Is "ConcurrentHashMap.putAll(...)" atomic?


Is the method ConcurrentHashMap.putAll(Map) supposed to be atomic?

I cannot find it in the documentation and it is not mentioned in the ConcurrentMap interface, so I guess the answer is no. I am asking it to be sure, since it wouldn't make sense if that operation wasn't atomic to be honest.

If it isn't atomic, what would be the best way to support atomic inserts of multiple items? Back to the good old synchronized?


Solution

  • It's not atomic, no. According to the class documentation:

    For aggregate operations such as putAll and clear, concurrent retrievals may reflect insertion or removal of only some entries.

    To atomicize it, you'll have to use synchronized, yes. There's no non-blocking way to do this.