私はさまざまな情報源からいくつかの声明を読み、ConcurrentHashmap
それらが本当にそうであるかどうかを確認したかった.
a の反復子
ConcurrentHashmap
が作成された後は、スレッドによる削除操作と更新操作のみが反映されることが保証されます。イテレータは、編集/削除後にスナップショットを更新しますか? イテレータが更新/削除を ADD とは異なる方法で処理するのはなぜですか。ConcurrentHashmap
データをセグメントにシャードして、ライター ロックの競合を減らします。このconcurrencyLevel
パラメーターは、クラスによって内部的に作成されるシャードの数を直接指定します。パラメーターなしのコンストラクターを単純に使用し、デフォルトの構成を受け入れると、最初の値を追加する前に、マップは 16 個のシャードに必要なオブジェクトをインスタンス化します…ここでシャードとは何を意味するのでしょうか? それはマップ内のデータのバケットですか、それともマップ全体のコピーですか。これは、更新を個別にロックできるデータベース内のページに似ていると理解しました。では、なぜconcurrencyLevel
記憶に影響を与えるのでしょうか?