ConcurrentHashMap.setzen V. S. ConcurrentHashMap.ersetzen
Aus der Javadoc-ich weiß ConcurrentHashMap.replace
atomar ist, aber was ist mit ConcurrentHashMap.put
? Ich sehe, Sie sind unterschiedlich implementiert in den source code, aber ich bin nicht in der Lage, herauszufinden, Ihre Unterschiede. Alle gurus geben einige Richtlinien über, wie man diese beiden Methoden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sind funktionell Verschieden.
replace
nur speichert die Schlüssel-Wert-paar, wenn es bereits eine gespeicherte Wert unter dem angegebenen Schlüssel. Die API-Dokumentation vonreplace
erklärt es:put()
ist geerbt von der KlasseAbstractMap
dieConcurrentHashMap
erstreckt. Keine besonderen Parallelität Vertrag ist aufput()
. Diese Vererbung erlauben den Einsatz vonConcurrentHashMap
in einem "traditionellen" Kontext einer Karte. Aber keineAbstractMap
Methode atomar ist.replace()
umgesetzt wird wie gewünscht von derConcurrentMap
- Schnittstelle. Diese Schnittstelle erfordert Atomare Operationen wiereplace()
. Nur die Methoden dieser Schnittstelle werden in ein concurrent-bewusst-code.Haben eine Atomare
put()
Betrieb, VerwendungputIfAbsent()
aus, dass gleicheConcurrentMap
- Schnittstelle.Blick auf den code SETZEN, in ConcurrentHashMap, die Umsetzung hat atomic Verhalten Hinzugefügt, und Java-docs sagen:
So wie ich das verstehe, sollte es sicher sein, zu verwenden, setzen Sie die Methode in eine ConcurrentHashMap.