たとえば、ConcurrentHashMapは同時コンテキストから使用するように設計されているため、それ以上同期する必要はありません。実際、そうすることで、それが導入する最適化が損なわれる可能性があります。
たとえば、Collections.synchronizedMap(...)は、マップスレッドを安全にする方法を表します。私が理解しているように、これは基本的に、synchronizedキーワード内のすべての呼び出しをラップすることによって機能します。一方、ConcurrentHashMapのようなものは、コレクション内の要素間で同期された「バケット」を作成し、よりきめ細かい同時実行制御を引き起こし、したがって、頻繁な使用下でのロックの競合を少なくします。たとえば、読み取りをロックしない場合もあります。これを同期アクセスで再度ラップすると、これを損なう可能性があります。明らかに、コレクションへのすべてのアクセスが同期されるなど、新しいライブラリのもう1つの利点であることに注意する必要があります。心配する必要はありません(同じくらい!)。
java.lang.concurrentコレクションは、syncrhonisedを介してスレッドセーフを実装する場合があります。その場合、言語仕様は可視性を保証します。彼らはロックを使わずに物事を実行するかもしれません。これについてははっきりしていませんが、ここでも同じ可視性が得られると思います。
コードで更新が失われたように見える場合は、それが単なる競合状態である可能性があります。ConcurrentHashpMapのようなものは、読み取りで最新の値を提供し、書き込みはまだ書き込まれていない可能性があります。多くの場合、精度とパフォーマンスの間のトレードオフになります。
ポイントは; java.util.concurrentはこのようなことを行うことを目的としているので、可視性を確保し、揮発性および/または追加の同期の使用は必要ないはずです。