ConcurrentHashMap と Collections.synchronizedMap(Map) の違いは何ですか? 質問する

ConcurrentHashMap と Collections.synchronizedMap(Map) の違いは何ですか? 質問する

複数のスレッドによって同時に変更されるマップがあります。

Java API には、3 つの異なる同期 Map 実装があるようです。

  • Hashtable
  • Collections.synchronizedMap(Map)
  • ConcurrentHashMap

私の理解では、Hashtableこれは古い実装(廃止されたDictionaryクラスを拡張したもの)であり、後でインターフェースに合わせて調整されましたMap。同期はとられていますが、深刻な問題があるようです。スケーラビリティの問題新しいプロジェクトでは推奨されません。

Collections.synchronizedMap(Map)しかし、他の 2 つはどうでしょうか?とによって返される Map の違いは何でしょうかConcurrentHashMap? どちらがどの状況に適合するのでしょうか?

ベストアンサー1

必要に応じて を使用してくださいConcurrentHashMap。これにより、複数のスレッドをブロックする必要なく、Map を同時に変更できます。 はCollections.synchronizedMap(map)、一貫性は確保されますが (適切に使用した場合)、パフォーマンスが低下するブロッキング Map を作成します。

データの一貫性を確保する必要があり、各スレッドがマップの最新ビューを持つ必要がある場合は、2 番目のオプションを使用します。パフォーマンスが重要で、各スレッドがマップにデータを挿入するだけで、読み取りの頻度が低い場合は、最初のオプションを使用します。

おすすめ記事