Wird die Methode ConcurrentHashMap.putAll (Map) als atomar angesehen?
Ich kann es in der Dokumentation nicht finden und es wird nicht in der ConcurrentMap-Schnittstelle erwähnt, also denke ich, die Antwort ist nein. Ich frage es, um sicher zu sein, da es keinen Sinn ergeben würde, wenn diese Operation nicht atomar wäre, um ehrlich zu sein.
Wenn es nicht atomar ist, was wäre der beste Weg, atomare Einfügungen mehrerer Elemente zu unterstützen? Zurück zum guten alten synchronisiert?
Es ist nicht atomar, nein. Laut der Klassendokumentation :
Bei aggregierten Operationen wie
putAll
undclear
können gleichzeitige Abrufe das Einfügen oder Entfernen von nur einigen Einträgen widerspiegeln.
Um es zu atomisieren, müssen Sie synchronized
, yes verwenden. Es gibt keine blockierungsfreie Möglichkeit, dies zu tun.
ganz oben in dem Dokument
Für aggregierte Operationen wie
putAll
undclear
, gleichzeitig Abrufvorgänge können das Einfügen oder Entfernen von nur einigen Einträgen widerspiegeln.
Tags und Links java atomic concurrenthashmap