concurrentHashMap是一個併發的map類,利用cas,Unsafe技術提供更細膩的併發控制,獲得更好的併發效果併發
1.8以前特性
特色:ui
- 鎖分段;concurrentcyLevel默認值是16;經過鎖定segment來實現同步;相比hashtable,進步很大.但初始化很慢;
- entry的value值加volatile,保證可見性
- putVal()方法重複掃描,檢測衝突,獲取再入鎖; 鎖的是segment,粒度仍是有點大.
- size統計,根據Segment.modcount值進行重試,不成功則鎖定;綜合統計;實際上不是很好
- get()方法利用了Unsafe.getOjbectVolatile(Object[],long n)方法
- resize() 針對segment進行擴容
1.8
特性:get
- 去掉segment,直接對Entry加鎖;實際上新增的鎖是加在鏈表頭或樹頭上的
- putVal時,使用synchronize鎖定entry值,更新時採用Unsafe的CAS技術更新
- Entry的value和以前沒變化
- size統計,合併統計, CounterCells,採用CounterCell類,使用LongAdder技術
- 初始化,雙檢鎖+cas技術進行控制;
- 取值是,利用(Node)U.getObjectAcquire(Object[],long n)技術
- resize() 一樣有樹化操做