9

ConcurrentHashMap.putAll(Map)メソッドはアトミックであると想定されていますか?

ドキュメントでそれを見つけることができず、ConcurrentMapインターフェースに記載されていないので、答えはノーだと思います。正直に言うと、その操作がアトミックでなければ意味がないので、確かにお願いしています。

アトミックでない場合、複数のアイテムのアトミック挿入をサポートするための最良の方法は何でしょうか?古き良き同期に戻りますか?

4

4 に答える 4

10

アトミックではありません。クラスのドキュメントによると:

putAllおよびなどの集計操作のclear場合、同時取得は一部のエントリのみの挿入または削除を反映する場合があります。

synchronizedそれを原子化するには、はいを使用する必要があります。これを行うためのノンブロッキングの方法はありません。

于 2011-12-14T23:40:31.807 に答える
3

ドキュメントの上部にあります

putAllおよびなどの集計操作のclear場合、同時取得は一部のエントリのみの挿入または削除を反映する場合があります。

于 2011-12-14T23:41:21.273 に答える
2

putAll()アトミックではありませんが、各個人がアトミックであるという保証がありput()ます。

于 2011-12-14T23:42:34.313 に答える
2

それを原子化するには、同期を使用する必要があります、はい

それだけではありません。すべてのパブリックマップメソッドの周囲に同期ブロックを配置する必要があるため、同時実行性が低下します。

于 2012-10-16T06:57:28.033 に答える