Java面试之HashMap多线程操作导致死循环问题

在多线程下,进行 put 操作会导致 HashMap 死循环,原因在于HashMap 的扩容 resize()方法。由于扩容是新建一个数组,复制原数据到数组。由于数组下标挂有链表,所以需要复制链表,但是多线程操作有可能导致环形链表。复制链表过程如下: 线程一:读取到当前的 HashMap 情况,在准备扩容时,线程二介入 线程二:读取 HashMap,进行扩容 线程一:继续执行 这个过程为,先将 A
相关文章
相关标签/搜索