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

             

  • 相关阅读:
    基于Metaweblog API 接口一键发布到国内外主流博客平台
    uva144 Student Grants
    Uva 10452
    Uva 439 Knight Moves
    Uva 352 The Seasonal War
    switch语句
    java——基础知识
    我的lua学习2
    codeforces 431 D. Random Task 组合数学
    codeforces 285 D. Permutation Sum 状压 dfs打表
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/14635004.html
Copyright © 2011-2022 走看看