> 文档中心 > 【图解】面试题:为什么HashMap会产生死循环

【图解】面试题:为什么HashMap会产生死循环


注意:HashMap死循环只会发生在JDK1.7,根本原因是由采用头插法所致

(1)JDK1.7中HashMap采用底层结构是数组+链表,在key值发生hash碰撞后,元素entry会采用头节点的插入方式,插入到链表的头部
在这里插入图片描述
(2)数组长度到达负载临界值触发数组扩容,由于是头插法,原来链表的顺序是A->B->C,扩容后变为C->B->A
在这里插入图片描述
(3)假设同时有线程T1与T2对数组进行扩容

  1. T1、T2同时指向A节点,那么T1.next与T2.next同时指向B节点。
  2. 假设T2让出时间片,T1线程先进行扩容,那么T1线程执行后的结果是链表的结构变为C->B->A,此时T2的没有感知,在其工作内存中仍然是T2指向A,T2.next指向B。
  3. 此时T2恢复执行,死循环就此产生。

在这里插入图片描述