HashMap+concurrentHashMap 结构分析

本文探讨了HashMap在JDK 8中引入的优化措施,包括数组+链表+红黑树的数据结构,并对比了JDK 7版本的数组+链表结构。此外,文章深入分析了ConcurrentHashMap在不同JDK版本中的实现方式,包括1.7版的分段锁机制和1.8版使用CAS+Synchronized保证并发安全性。

简单回顾下hashmap的数据结构,具体底层的数据结构目前理解的还不是很透彻,本篇只做为本人笔记,仅供参考,本人数据结构 基础很弱,后续领悟透彻,继续完善。

1.jdk8对HashMap 做了优化,
    jdk7的结构是 数组+链表,
    jdk8 是数组+链表+红黑树,
复制代码

jdk1.7 concurrenthashmap概述

    1.写操作时,通过锁分段,提高效率,理想状态下,可以支持16个线程执行并发写操作,以及任意数量的读操作。
复制代码

    2.下图是conurrenthashmap的结构:本质是一个segment数组,总的来说,通过以下3个方面来保证高效性
     .通过锁分段保证并发环境下的写操作
     .通过HashEntry的不变性,volatile变量的内存可见性和加锁重读机制保证高效安全的读操作
     .通过不加锁和加锁两种方案控制跨段操作的的安全性。
复制代码

    3.concurrentHashMap分析
        1.包含两个核心静态内部类 segment,HashEntry
        2.segment 继承 ReentrantLock ,充当锁的角色,每个sgement对象守护每个散列映射表的若干个桶。
        3.HashEntry用来封装 K/V对。
        4.每个桶是由若干个 HashEntry 对象链接起来的链表。
复制代码

jdk1.8 concurrentHashMap分析

1.  1.8的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全,底层采用数组+链表+红黑树的存储结构
2.  Z              c 复制代码

转载于:https://juejin.im/post/5a799cc7f265da4e6e2bacb6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值