其他分享
首页 > 其他分享> > HashMap并发安全问题

HashMap并发安全问题

作者:互联网

HashMap resize操作部分源码

 1 for (Entry<K,V> e : table) {
 2     while(null != e) { //// 1、当前结点不为null
 3         Entry<K,V> next = e.next;//// 2、获取 e.next,赋值给next暂存
 4         if (rehash) {
 5             e.hash = null == e.key ? 0 : hash(e.key); // 计算e的哈希值
 6         }
 7         int i = indexFor(e.hash, newCapacity); // 计算 e在新Entry[]中的位置i
 8         e.next = newTable[i];//// 3、让e.next指向newTable[i]的头结点
 9         newTable[i] = e;//// 4、让e作为newTable[i]的头结点。这里是倒叙插入,新的结点作为头结点,头插法
10         e = next;//// 5、让next作为oldTable[j]的头结点
11     }
12 }

HashMap正常情况下的resize

 

HashMap多线程resize,出现环(紫色是线程A,绿色是线程B)

 

标签:结点,hash,HashMap,安全,newTable,next,并发,null
来源: https://www.cnblogs.com/zedh/p/14416960.html