其他分享
首页 > 其他分享> > 面试题12-ConcurrentHashMap

面试题12-ConcurrentHashMap

作者:互联网

ConcurrentHashMap原理及jdk7和jdk8的区别

jdk7:

ReentrantLock+Segment+HashEntry,一个Segment中包含一个HashEntry数组,每个HashEntry又是一个链表结构

二次hash,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部

Segment分段锁 Segment继承了ReentrantLock,锁定操作的Segemnt,其他的Segment不受影响,并发度为segment个数,可以通过构造函数指定,数组扩容不会影响到其他的Segment

jdk8:

synchronized+CAS+Node+红黑树,Node的val和next都用volatile修饰,保证可见性

CAS

https://segmentfault.com/a/1190000014858404

CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数 -- 内存位置、预期数值和新值。CAS 的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。

在 Java 中,Java 并没有直接实现 CAS,CAS 相关的实现是通过 C++ 内联汇编的形式实现的。Java 代码需通过 JNI 才能调用。关于实现上的细节,我将会在第3章进行分析。

前面说了 CAS 操作的流程,并不是很难。但仅有上面的说明还不够,接下来我将会再介绍一点其他的背景知识。有这些背景知识,才能更好的理解后续的内容。

标签:Node,面试题,12,Java,CAS,ConcurrentHashMap,volatile,HashEntry,Segment
来源: https://www.cnblogs.com/jsit-dj-it/p/15478614.html