首页 > 其他分享 >jdk7 HashMap resize 死循环过程详解

jdk7 HashMap resize 死循环过程详解

时间:2022-12-07 00:33:22浏览次数:66  
标签:HashMap 链表 线程 jdk7 死循环 resize

       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

相关文章