jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表

Posted vsop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表相关的知识,希望对你有一定的参考价值。

扩容时使用transfer
transfer不同于put时的判断hash冲突,直接使用头插法,如果没有冲突,则next为null。
如下:
e.next = newTable[i];
newTable[i] = e;
如果线程B设置了newTable[i] = e,线程A执行e.next = newTable[i];
则会造成e.next = e;不论是否有链表,都会造成死循环。

以上是关于jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表的主要内容,如果未能解决你的问题,请参考以下文章

HashMap设计思想学习

1.7和1.8 HashMap 源码浅析

看看不一样的ConcurrentHashMap

看看不一样的ConcurrentHashMap

看看不一样的ConcurrentHashMap

看看不一样的ConcurrentHashMap