JDK1.7 扩容死锁问题

171 阅读1分钟

程序中有两个线程对hashmap进行扩容

扩容前:线程1 得到一条链表的状态尾 1--->35 ---->16 这是线程1 遍历时 e:1 --->35--->16 next--->35--->16

线程2 对其进行扩容。
因为hashmap1.7使用的是头插法,元素的相对位置会变 扩容完成后1---->35---->16的状态变成了 35---->1---->null

切换到线程1
e:1
next =35 由于next指向了该元素的前一个元素,所以形成了循环链表,造成了死锁。