0

クイズで以下のことを尋ねられたとき、私は自分の理解に多少混乱しました。

1) ConcurrentHashMap: 私の理解では、このマップから値 (キーに対応) を取得するためのロックはありません。質問: これが true の場合、t1 が (セグメント/バケットをロックすることによって) 書き込みを行っており、t2 が同じものを読み取ろうとすると、t2 は正しい値を取得できず、t2 の値に一貫性がなくなります。

2)HashMap:私の理解によると、要素がハッシュバケットに追加される前に、ハッシュ値Hはキー(key.hashcode())のハッシュコード%16(0から15の値を与える)として計算され、バケットに追加されますハッシュ値が Hで ある 注 : 16 個のバケット (デフォルトの実装) がありArrayListLinkedList


|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 | 11 |12 |13 |14 |15 |


ArrayList at 2000(メモリアドレス)

これはConcurrentHashMap のセグメンテーションの複製であると非常によく言えます。Javaコントローラーでの同時 hashmap 、 HashMap または ConcurrentHashMap内部動作に関して? などしかし、疑問について理解する必要があります。良い説明へのリンク/ブログはほとんどありません。ありがとう

4

1 に答える 1

0

ConcurrentHashMapHashMapを調べるには、このリンクを使用してください

第1部用。あなたの言っていることは正しいです。ConcurrentHashMap でキーが見つかった場合、get() はセグメントをロックしません。Map の構造を変更している別のスレッド (put() など) があり、それがまだ終了していない場合、古い値を取得することは確実ですが、ConcurrentModificationException はスローされません。変更操作が取得操作の前に完了した場合、更新された値が反映されます。

これが役立つことを願っています。

于 2013-06-08T06:40:34.707 に答える