首页 > 其他 > 详细

ConcurrentHashMap原理,jdk7和jdk8的区别

时间:2021-04-09 00:09:57      阅读:31      评论:0      收藏:0      [点我收藏+]

    ConcurrentHashMap原理,jdk7和jdk8的区别

 

    jdk7

    数据结构:RenntrantLock+Segment+HashEntry,一个Segment中包含了一个hashEntry

    数组,每个HashEntry又是一个链表结构,

    元素查询:二次hash,第一次hash定位带Segment,第二次hash定位到元素所在的链表的头部。

    锁: Segment分段锁,Segment继承了ReentrantLock,锁定操作的Segment,其他的

    Segment不受影响,并发度为Segment个数,可以通过构造函数指定,数组扩容会影响其他的segment。

    get方法无需加锁,volatile保证。

    

    jdk8 :

    数据结构 synchronized + cas +node +红黑树, node 的val和next都用volatile修饰,保证可见性,

    查找,替换,复制操作都是用cas

    锁: 锁链表的head节点,不影响其他的元素的读写,锁颗粒度更细,效率更高,扩容时,

    阻塞所有的读写操作,并发扩容。

    读操作无锁,

       node的val和next使用volatile修饰,读写线程对该变量互相可见,

        数组用volatile修饰,保证扩容时被读线程感知。

         

 

ConcurrentHashMap原理,jdk7和jdk8的区别

原文:https://www.cnblogs.com/hrlizhi/p/14635004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!