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() 一样有树化操做
相关文章
相关标签/搜索