複数のスレッドによって同時に変更されるマップがあります。
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 番目のオプションを使用します。パフォーマンスが重要で、各スレッドがマップにデータを挿入するだけで、読み取りの頻度が低い場合は、最初のオプションを使用します。