其他分享
首页 > 其他分享> > ConcurrentHashMap是如何保证线程安全的

ConcurrentHashMap是如何保证线程安全的

作者:互联网

JDK1.7,采用分段锁技术

本质上还是采用数组+链表的形式存储键值对的。为了提高并发,把原来的整个 table 划分为 n 个 Segment 。从整体来看,它是一个由 Segment 组成的数组。每个 Segment 里边是由 HashEntry 组成的数组,每个 HashEntry之间又可以形成链表。我们可以把每个 Segment 看成是一个小的 HashMap,其内部结构和 HashMap 是一模一样的。当对某个 Segment 加锁时,不会影响到其他 Segment 的读写,降低锁的竞争。

JDK1.8,采用的是Synchronized + CAS + volatile

Synchronized 由于锁优化和锁升级性能得到了很大提升,通过 CAS 乐观锁实现原子操作,利用volatile保证可见性。

标签:ConcurrentHashMap,HashMap,CAS,链表,保证,HashEntry,数组,线程,Segment
来源: https://blog.csdn.net/Anenan/article/details/115543284