HashMap为什么是线程不安全的?

1.多线程下进行put操作的时候导致的数据不一致。

当有多个线程进行put操作时,第一个线程已经计算好需要存放的值的桶索引坐标,此时轮到第二个线程,第二个线程成功地把记录插入到桶里面,然而两个线程计算出来的桶索引可能是一样的,然后第一个线程就会继续往原先的桶索引插值,这就覆盖了第二个线程的记录。

2.可能因为扩容而引起死循环。

在扩容的时候,JDK1.8之前是采用头插法,当两个线程同时检测到hashmap需要扩容,在进行同时扩容的时候有可能会造成链表的死循环,因为采用头插法,新链表与旧链表的顺序是反的。在JDK1.8之后采用尾插法就不会出现这种问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值