0
点赞
收藏
分享

微信扫一扫

HashMap并发下死循环打满cpu分析

杰克逊爱学习 2021-09-28 阅读 83
码哥
  • HashMap如果误用到了并发场景很容易出现死循环现象,原因就是在put时进行扩容resize方法中,从老数组拷贝数据到扩容后的新数组造成的


void transfer(Entry[] newTable)
{
    Entry[] src = table;
    int newCapacity = newTable.length;
    for (int j = 0; j < src.length; j++) {
        Entry<K,V> e = src[j];
        if (e != null) {
            src[j] = null;
            do {
                // 假设线程1执行完这句停住,线程2执行完了transfer方法,线程1再次执行的情况
                Entry<K,V> next = e.next;
                int i = indexFor(e.hash, newCapacity);
                e.next = newTable[I];
                newTable[i] = e;
                e = next;
            } while (e != null);
        }
    }
}
举报

相关推荐

0 条评论