网上的hashmap冲突太长,太复杂,看的脑仁疼,自己随便总结下,有不同意的请指正
    
    代码如下
    
    do {
    
    
    Entry<K,V> next = e.next; // <–假设线程一执行到这里就被调度挂起了
    
    int i = indexFor(e.hash, newCapacity);
    
    e.next = newTable[i];
    
    newTable[i] = e;
    
    e = next;
    
    } while (e != null);
   
如图
    
   
    
    hashmap结构为数组加链表,数组是竖的这一列,链表为横的这排
    
    线程1 执行到代码所示位置 挂起
    
    线程2 执行结束,用的头插法,所以next在e的前面,next指向e
    
    然后线程1继续执行,此时e被变了吗?没有变,是线程栈里的变量
    
    重新插入,头插法,将e插到next前面,这时e又指向next,好,循环指针形成
   
附:看的脑仁疼的链接
 
版权声明:本文为xiaoe3504xiaoe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。