zoukankan      html  css  js  c++  java
  • ConcurrentHashMap原理,jdk7和jdk8的区别

        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修饰,保证扩容时被读线程感知。

             

  • 相关阅读:
    2、selinux服务的操作
    1、添加nginx到全局变量中
    linux每日命令(1):which
    QT重载基类绘制函数并在基类绘制结果基础上进行子类的绘制
    QT信号槽无法正常通信的原因
    mapgis6.7+加密狗+二次开发SDK库
    KMP算法参考及C语言实现
    elastic search
    RabbitMq docker集群
    RabbitMq安装
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/14635004.html
Copyright © 2011-2022 走看看