HashMap为什么是线程不安全的

总所周知,HashMap是线程不安全的,CurrentHashmap和HashTable是线程安全的,那为啥HashMap是线程不安全的呢?有些小伙伴肯定会说因为HashMap没有被syschronized修饰,这句话没有毛病,但是面试官肯定不想听到这个答案。正确的回答是:

1、在1.7版本的时候HashMap在多线程的情况下,当HashMap需要扩容的时候会出现数据丢失和造成死循环(生成环形链)

2、在1.8版本的时候HashMapp在多线程的情况下,当HashMap put数据的时候可能会出现数据覆盖问题。比如:两个线程A,B同时put数据,这时候计算出的hashCode值相等,然后到了最后一步插入数据的时候,其中A线程让出了CPU的执行时间,B线程直接把数据存入到map里面。然后这时A线程获取到了CPU执行时间时,因为之前已经进行了hash碰撞了,就不会再次去进行hash碰撞处理hashCode值相同的情况。所以这个时候A线程直接覆盖B线程的数据,这样就导致了B线程的数据被覆盖了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值