版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/89295608
jdk1.7 :
1 多线程put后可能导致get死循环
2 多线程put的时候可能导致元素丢失
举个栗子,HashMap进行put操作时是先计算hashCode找到桶,然后遍历桶内的链表找到插入位置插入。如果2个线程t1、t2分别put一个hashCode相同的元素e1、e2,就可能导致找到相同的插入位置(a),t1里a.next=e1,t2里a.next=e2,就只有一个数据保留了下来,丢了一个。
链接:https://www.zhihu.com/question/68111032/answer/358233108
3 put非null元素后get出来的却是null
线程1 将table【j】=null;线程2同时去访问原table,结果违反了直觉
以上三个问题详见:https://blog.csdn.net/qfzhangwei/article/details/69938937
jdk1.8:
多线程put的时候可能导致元素丢失
如果两个线程都put()时,使用p.next = newNode(hash, key, value, null);
同时取得了p,则他们下一个元素都是newNode,然后赋值给table元素的时候有一个成功有一个丢失。