HashMap线程安全

HashMap 是线程安全的吗,为什么不是线程安全的。

  1. 不是线程安全的,因为多线程环境下,使用 HashMap 进行 put 操作可能会引起死循环,导致 CPU 利用率接近 100%,所以在并发情况下 HashMap 不是线程安全的。
  2. 如果有两个线程 A 和 B,都进行同时插入数据,刚好这两条不同的数据经过哈希码是一样的,且该位置还没有其他的数据。所以这两个线程都会进入。假设一种情况,线程 A 通过 if 判断,该位置还没有哈希冲突,进入 if 语句,还没有进行数据插入,这时候 CPU 就把资源让给了线程 B,线程 A 停在了 if 语句里面,线程 B 判断该位置没有哈希冲突(线程 A 的数据还没插入),也进入了 if 语句,线程 B 执行完后,轮到线程 A 执行,现在线程 A 判断直接在该位置插入而不用在判断(因为已经判断过了,准备执行插入操作)。这时候,会发现线程 A 把线程 B 插入的数据给覆盖了。发生了线程不安全情况。本来在 HashMap 中,发生哈希冲突是可以链表法或者红黑树来解决的,但是在多线程中,可以就直接给覆盖了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值