ConcurrentHashMap.putAll(Map)メソッドはアトミックであると想定されていますか?
ドキュメントでそれを見つけることができず、ConcurrentMapインターフェースに記載されていないので、答えはノーだと思います。正直に言うと、その操作がアトミックでなければ意味がないので、確かにお願いしています。
アトミックでない場合、複数のアイテムのアトミック挿入をサポートするための最良の方法は何でしょうか?古き良き同期に戻りますか?
ConcurrentHashMap.putAll(Map)メソッドはアトミックであると想定されていますか?
ドキュメントでそれを見つけることができず、ConcurrentMapインターフェースに記載されていないので、答えはノーだと思います。正直に言うと、その操作がアトミックでなければ意味がないので、確かにお願いしています。
アトミックでない場合、複数のアイテムのアトミック挿入をサポートするための最良の方法は何でしょうか?古き良き同期に戻りますか?
アトミックではありません。クラスのドキュメントによると:
putAll
およびなどの集計操作のclear
場合、同時取得は一部のエントリのみの挿入または削除を反映する場合があります。
synchronized
それを原子化するには、はいを使用する必要があります。これを行うためのノンブロッキングの方法はありません。
ドキュメントの上部にあります
putAll
およびなどの集計操作のclear
場合、同時取得は一部のエントリのみの挿入または削除を反映する場合があります。
putAll()
アトミックではありませんが、各個人がアトミックであるという保証がありput()
ます。
それを原子化するには、同期を使用する必要があります、はい
それだけではありません。すべてのパブリックマップメソッドの周囲に同期ブロックを配置する必要があるため、同時実行性が低下します。