0

私は、concurrenthashMap API を調査しstatic final int DEFAULT_CONCURRENCY_LEVEL = 16;ていて、マップが内部で 16 の部分に分割されるという状態を見つけました。現在、私のクエリは、同時 hashMap の場合、マップ オブジェクト全体がロックされておらず、代わりに一部がロックされていることがわかっているということです。マップの。

マップがどのように分割され、セグメンテーションによってどのように内部的に壊れているか、各スレッドがセグメントの一部をどのように保護しているかを小さな画像表現で誰かが示すことができますか? より役立つ小さなグラフィック画像でアドバイスしてください.

4

1 に答える 1

0

ConcurrentHashMap には「セグメント」の配列があり、各セグメントは完全に独立したハッシュ テーブルであり、独自のミューテックスによって保護されています。呼び出しスレッドは、指定されたキーのハッシュ コード (32 ビット) を計算し、その上位 4 ビットを使用して、使用するセグメントを選択します。

スレッドが put() を実行しているとき、セグメントのミューテックスをロックします。get() 操作は、最初にミューテックスをロックせずに値を取得しようとするため、少しトリッキーです。

于 2014-01-02T21:40:28.357 に答える