JDK1.8之前出现死循环的原因:
HashMap在多线程环境下,同时进行
put
操作,并且同时进行
扩容
时,会出现
链表环
,导致死循环
因为jdk1.8之前采用的是
头插法
,新加入的冲突元素将会插到原有链表的头部。
扩容之后,链表上的元素顺序会反过来。这也是造成死循环的原因之一
JDK1.8解决之前版本出现的死循环:
jdk1.8后是直接把节点放到扩容后原有链表的
尾部
其实JDK1.8也会出现死循环,只是原因不同:
i)链表转换为树
ii)对树进行操作时
版权声明:本文为di_ko原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。