ConcurrentHashMap

ConcurrentHashMap

ConcurrentHashMap是线程安全的,效率较高。在JDK7和JDK8中,底层原理不一样。

ConcurrentHashMap1.7原理解析

ConcurrentHashMap1.8版本原理解析

底层结构:哈希表。(数组、链表、红黑树的结合体)

结合CAS机制+synchronized同步代码块形式保证线程安全

总结

  1. 如果使用空参构造创建ConcurrentHashMap对象,则什么事情都不做,在第一次添加元素的时候创建哈希表
  2. 计算当前元素应存入的索引
  3. 如果该索引位置为null, 则利用cas算法,将本结点添加到数组中
  4. 如果给索引位置不为null, 则利用volatile关键字获得当前位置最新的结点地址,挂在下面,变成链表
  5. 当链表的长度大于等于8时,自动转换成红黑树
  6. 以链表或者红黑树结点为锁对象,配合synchronized保证多线程操作集合时数据的安全性。