java核心api中的HashMap,resize有死循环的风险,这是大家都知道的。具体过程是啥呢?本篇章具体讲一讲。本讲解文章,建立在大家大致明白HashMap基本原理的基础上。
本人看的是jdk7源码,先上一段jdk7 resize核心源码。图片中有我的代码注释
本人要阐述的场景,需要三个并发线程,设为T1 T2 T3。同时,假设resize时,数组下标i处有两个节点组成的链表。a->b。
场景如下图,我手写了一个:
注意,线程T1、T2形成环形链表后,本身不会死循环,当线程T3并发resize后,会死循环。
归结死循环的原因,就是resize的算法,将原链表倒转形成新链表,jdk8的算法做了改进,也就避免了死循环。
标签:HashMap,链表,线程,jdk7,死循环,resize From: https://www.cnblogs.com/kingcode/p/16961909.html