私が知っているJavadocからConcurrentHashMap.replace
はアトミックですが、どうConcurrentHashMap.put
ですか? ソースコードでの実装が異なっていることがわかりますが、それらの違いを理解することはできません。これら 2 つの方法の使用方法に関するガイドラインを提供する専門家はいますか?
9092 次
3 に答える
14
それらは機能的に異なります。replace
指定されたキーの下に値がすでに格納されている場合にのみ、キーと値のペアを格納します。の API ドキュメントでは、次のようにreplace
説明されています。
現在何らかの値にマップされている場合にのみ、キーのエントリを置き換えます。これは、
if (map.containsKey(key)) { return map.put(key, value); } else return null;
ただし、アクションはアトミックに実行されます。
于 2012-08-15T10:15:32.047 に答える
2
put()
拡張するクラスから継承されAbstractMap
ます。ConcurrentHashMap
特定の同時実行契約はありませんput()
。この継承によりConcurrentHashMap
、マップの「従来の」コンテキストでの使用が可能になります。しかし、AbstractMap
アトミックなメソッドはありません。
replace()
インターフェイスの要求に応じて実装されConcurrentMap
ます。このインターフェイスには、 のようなアトミック操作が必要ですreplace()
。このインターフェースのメソッドのみが、並行対応コードで使用されます。
アトミックput()
操作を行うには、同じインターフェイスputIfAbsent()
から来るを使用します。ConcurrentMap
于 2012-08-15T12:25:18.327 に答える