I.はじめに
- CurrentHashMapは使用して、スレッドセーフである
数组+链表
達成するためのキーと値の構造を。
II。原理
-
なぜ、スレッドセーフCurrentHashMap必要がありますか?
同時状況では、あなたが使用することができますが、Collections.synchronizedMap()
スレッドセーフのセットを作成するためにマップを、または使用スレッドセーフHashtable
が、両方の非効率的なので、効率と高性能CurrentHashMapと。 -
達成
JDK1.7バージョン:数组+链表
各セル(HashMapのと同様に)アレイセグメントHashEntryを維持し、(1)
、配列の各要素(2)は、それぞれ、セグメントロック(すなわち、セグメントのロックを使用);
(3)あたりHashEntry次の修正値の揮発性および次のノードを採用しています。JDK1.8の最適化:
(1)ロック・セグメント同期+ CASを使用して、元のを放棄し、
(2)HashEntryノードに、まだ変更された値と揮発性次へと、
リスト内の8ときに変換され、赤色よりも大きくなる(3)。黒の木。