ConcurrentHashMap學習

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() 一樣有樹化操做
相關文章
相關標籤/搜索