HashMap为什么线程不安全

HashMap的线程安全问题体现在以下3个方面:

1、线程1调用contains()返回true,然后调用get(),同时线程2调用remove()

2、2个线程执行put操作: 线程1put()时,记录了头结点为node1,这时时间片用完,线程2put(),且把数据插在了链表的头部,完成put操作。线程1接着完成put()剩余的操作,这时新的头结点已经变了,但是线程1记录的旧的头结点,把数据插入到头结点,覆盖了线程2put的数据,导致线程不安全。

3、rehash的时候,会产生循环链表,get的时候,死循环。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/csdnlijingran/article/details/89892595