ConcurrentHashMap
およびこの関連するチュートリアルを行っていて、いくつか質問がありました。
ConcurrentHashMap
この記事では、ブロックすることなく複数のリーダーが同時に読み取ることができると言及していました。これは、同時実行レベルに基づいてマップをさまざまな部分に分割し、更新中にマップの一部のみをロックすることによって実現されます。デフォルトの同時実行レベルは 16 であるため、Map は 16 の部分に分割され、各部分は異なるロックで管理されます。これは、Map の別の部分で動作するまで、16 個のスレッドが Map で同時に動作できることを意味します。これによりConcurrentHashMap
、スレッド セーフが維持されているにもかかわらず、パフォーマンスが向上します。ただし、注意事項put()
がremove()
ありputAll()
ますclear()
。記事でも言及されているもう 1 つのポイント:覚えておくべきもう 1 つの重要なポイントは、CHM の繰り返しです。返される Iterator は
keySet
一貫性が弱くConcurrentHashMap
、特定の時点での状態のみを反映し、最近の変更は反映されない可能性があります。
太字で強調表示されている点が理解できませんでした。詳細情報を提供するか、簡単なプログラムを示してもらえますか?