一、数据结构
默认值都为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底层实现与源码分析