1,hashmap在hash冲突时,采用链表方式存储冲突数据
2,hashmap扩容时,新建一个两倍容量的数组,将链表复制过去,1.8前采用的头插法,会倒置原来的链表顺序
3,多线程执行put方法,同时要扩容时,第一个线程执行到新建扩容的数组后就挂起了。另一个完成扩容操作
4,第一个线程回来,本地的haspmap还未扩容的状态,继续扩容,复制链表时,链表最后一个节点本应指向null。但被另一线程完成扩容变成了头节点,指向了下一个元素。此时线程一完成扩容,链表变成环形链表
5,后面有人查此处hash的数据时,遍历链表查询形成死循环查找