1.7 concurrentHashMap底层实现与源码分析

一、数据结构

在这里插入图片描述
默认值都为16,但是HashEntry[] table的长度至少为2
在这里插入图片描述
在这里插入图片描述

二、扩容方式

只对超过加载因子的segment[]节点中的HashEntry[]数组进行双倍扩容,每个segment[]节点中的数组都是一个独立的HashEntry集合
在这里插入图片描述
区别:遍历时,找到与最后一个节点连续能放到同一个节点的连续链表
在这里插入图片描述
找到连续链表以后,先将这段放入新数组的下标节点中,再遍历通过头插法将其他节点移入新数组
在这里插入图片描述

三、线程安全

通过UNSAFE获取内存中的实时变量值,通过trylock与lock锁锁住一些方法
在这里插入图片描述

在这里插入图片描述
个别方法使用局部锁
在这里插入图片描述

tryLock 获取到返回true不能返回false,不会发生阻塞;
Lock 不能获取到时回一直阻塞直到获取到

四、底层实现

put方法

j是代表Segment数组中的小标;ensureSegment是在j位置生成HashEntry数组
在这里插入图片描述
在HashEntry数组中头插入节点,基本是一个小HashMap数组,区别在于使用的变量是通过UNSFEA类直接获取和赋值类加载器内存中的变量值。
在这里插入图片描述

get方法

在这里插入图片描述
上一篇:1.7 HashMap底层实现与源码分析
下一篇:1.8 HashMap底层实现与源码分析
1.8 concurrentHashMap底层实现与源码分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值