jdk1.7 hashMap扩容 Infinite Loop
2020-07-10 15:16:42 0 举报
jdk1.7 hashMap扩容 Infinite Loop
作者其他创作
大纲/内容
k3
3
0
2
理论上元素超过三个就会扩容,新table的cap为4
1
线程一
k7
假设hash算法就是k%cap
线程二已完成复制
我们上看了解了复制节点的顺序,现在我们发现k3的next又指向了k7,因此它们形成一个无限环
k5
k7的next指向k3
线程二
正常情况:1.因为新cap所以元素会重新分配2. 复制元素流程:t -> newK -> oldK(所以k7和k3看上去反过来了,附源码)
线程一
虽然hashMap本身就不支持高并发,官方也不认为这是一个问题。但是这个小的场景却可以在面试中引出线程安全问题,及之后的concurrentHashMap等一系列jdk源码问题。不可不防啊
线程一进入方法(右侧源码*,已经生成newTable)被挂起
cap初始为2,负载因子为1.5
重点来了,此时线程一要完成转换,我们单看k7,k3两个节点
0 条评论
回复 删除
下一页