HashMap高并发问题

版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/89295608

 jdk1.7 :

1 多线程put后可能导致get死循环

HashMap jdk1.7 高并发导致死循环

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元素的时候有一个成功有一个丢失。

https://itimetraveler.github.io/2017/11/25/%E3%80%90Java%E3%80%91HashMap%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%EF%BC%88JDK1.8%EF%BC%89/#%E6%A0%91%E5%BD%A2%E5%8C%96%E6%96%B9%E6%B3%95treeifyBin

猜你喜欢

转载自blog.csdn.net/u010002184/article/details/89295608