ConcurrentHashMap是如何保证线程安全的

JDK1.7,采用分段锁技术

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

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

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

上一篇:文章随机收藏 2020-11-25


下一篇:tee命令的妙用