zoukankan      html  css  js  c++  java
  • 源码分析 HashTable与CurrentHashMap1.7与currentHashMap1.8对比

    HashTable

      

    jdk1.7currentHashMap

    jdk1.8currentHashMap

      

     ConcurrentHashMap线程安全的具体实现方式/底层具体实现
        JDK1.7(上面有示意图)
          首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的
        数据也能被其他线程访问。
        ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成
        Segment 实现了 ReentrantLock,所以 Segment 是一种可重入锁,扮演锁的角色。HashEntry 用于存储键值对数据。
        static class Segment<K,V> extends ReentrantLock implements Serializable {
        }
        一个 ConcurrentHashMap 里包含一个 Segment 数组。Segment 的结构和HashMap类似,是一种数组和链表结
        构,一个 Segment 包含一个 HashEntry 数组,每个 HashEntry 是一个链表结构的元素,每个 Segment 守护着一个
        HashEntry数组里的元素,当对 HashEntry 数组的数据进行修改时,必须首先获得对应的 Segment的锁。
      JDK1.8(上面有示意图)
          ConcurrentHashMap取消了Segment分段锁,采用CAS和synchronized来保证并发安全。数据结构跟HashMap1.8
        的结构类似,数组+链表/红黑二叉树。
      synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍
  • 相关阅读:
    UVA101 The Blocks Problem 题解
    洛谷P2790 ccj与zrz之积木问题 题解
    NOIp2018 TG day1 T2暨洛谷P5020 货币系统:题解
    网页学习:day1
    NOIP2018提高/普及成绩
    NOIP2018普及T4暨洛谷P5018 对称二叉树题解
    NOIP2018&2013提高组T1暨洛谷P5019 铺设道路
    比赛:小奔的方案 solution
    比赛:小奔的矩形solution
    比赛:小奔与不等四边形solution
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11713569.html
Copyright © 2011-2022 走看看