Aus dem Javadoc weiß ich ConcurrentHashMap.replace
ist Atom, aber was ist mit ConcurrentHashMap.put
? Ich sehe, dass sie im Quellcode unterschiedlich implementiert sind, aber ich bin nicht in der Lage, ihre Unterschiede herauszufinden. Irgendwelche Gurus, um einige Richtlinien zu geben, wie man diese zwei Methoden benutzt?GleichzeitigeHashMap.put V.S. ConcurrentHashMap.replace
Antwort
Sie sind funktionell unterschiedlich. replace
speichert das Schlüssel/Wert-Paar nur dann, wenn bereits ein Wert unter dem angegebenen Schlüssel gespeichert wurde. Die API-Dokumentation von replace
erklärt es:
Ersetzt den Eintrag für einen Schlüssel nur, wenn derzeit auf einen Wert zugeordnet ist. Dies entspricht
mit der Ausnahme, dass die Aktion atomar ausgeführt wird.
put()
ist aus der Klasse geerbt AbstractMap
die ConcurrentHashMap
erstreckt. Kein besonderer Nebenvertrag ist unter put()
. Diese Vererbung ermöglicht die Verwendung von ConcurrentHashMap
in einem "traditionellen" Kontext einer Map. Aber keine AbstractMap
Methode ist atomar.
replace()
ist implementiert wie von der ConcurrentMap
Schnittstelle angefordert. Diese Schnittstelle erfordert atomare Operationen wie replace()
. Nur Methoden dieser Schnittstelle sollen in einem gleichzeitig erkennbaren Code verwendet werden.
Um eine atomare put()
Operation zu verwenden, verwenden Sie putIfAbsent()
von der gleichen ConcurrentMap
Schnittstelle.
auf dem Code von PUT Blick in ConcurrentHashMap, hat die Umsetzung Atom Verhalten hinzugefügt, und Java docs sagen:
Blockquote Diese Klasse umfasst die gleiche funktionale Spezifikation wie Hashtable gehorcht und enthält Versionen von Methoden entsprechend jeder Methode von Hashtable.
Wie ich verstehe, sollte es sicher sein, Put-Methode in einer ConcurrentHashMap zu verwenden.
- 1. V.S Reporting 2008
- 2. GPS V.S. Beschleunigungssensor zur Berechnung der Entfernung
- 3. globale Variable V.S. Dateivariable in C++
- 4. Wie verhindert man SQL-Fehler bei Mehrfach-Join-Zeilen und Werte für mehrere Zeilen?
- 5. Deaktivieren Sie die Tastatur <enter> Taste
- 6. R plot - Farbe der Einträge in Plots Punkten basierend auf Vorhandensein in anderen Datenrahmen (unter Verwendung von loop)
- 7. Typescript typeguard Fehler im Klassenkonstruktor
- 8. Was ist der Unterschied zwischen `abs` vs` fabs` ist in (C++)
- 9. wie Datum aus XML-Datei abrufen
+1 Und beide Operationen sind atomar. –
Ich hätte den Javadoc besser lesen sollen ... Danke! –