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

扩容时使用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;不论是否有链表,都会造成死循环。

posted @ 2019-10-12 17:56  vsop_479  阅读(262)  评论(0编辑  收藏  举报