ConcurrentHashMap详解
原文链接 http://zhhll.icu/2020/12/14/java%E5%9F%BA%E7%A1%80/%E9%9B%86%E5%90%88/ConcurrentHashMap%E8%AF%A6%E8%A7%A3/ ConcurrentHashMap详解 JDK7 Segment 在jdk8之前concurrentHashMap使用该对象进行分段加锁,降低了锁的粒度,使得并发效率提高,Segment本身也相当于一个HashMap,Segment包含一个HashEntry数组,数组中每个HashEntry既是一个键值对,又是一个链表的头结点 get方法 根据key做hash运算,得到hash值 通过hash值,定位到对应的segment对象 再次通过hash值,定位到segment当中数组的具体位置 put方法 根据key做hash运算,得到hash值 通过hash值,定位到对应的segment对象 获取可重入锁 再次通过hash值,定位到segment当中数组的具体位置 插入或覆盖hashEntry对象 释放锁 但是使用这种方式实现需要进行两次hash操作,第一次hash操作找到对应的segment,第二次hash操作定位到元素所在链表的头部 JDK8 在jdk8的时候参考了HashMap的设计,采用了数组+链表+红黑树的方式,内部大量采用CAS操作,舍弃了分段锁的思想