两个线程分别往一个hashMap里插入,以i为key,为什么最后hashMap的数量超过1W了?i最大不是也就9999吗?
3条回答 默认 最新
- 於黾 2022-09-05 14:21关注
你有2个线程,每个插入1W,数量最大1W?
我猜你想问的是,hashMap里怎么会出现重复的数据
正常线性操作的时候,数据进入之前会进行校验,不会出现重复数据
但你是多线程操作,而hashMap是线程不安全的
所以会出现bug
-=-=-=
我们简单分析一下
hashMap插入一条数据的时候是这样的顺序
1.计算数据的hash值
2.判断hash值是否存在
3.插入值
4.执行size++
当线程1和线程2“同时”执行插入数据1这个操作时,线程1判断1不存在,线程2也判断1不存在,然后线程1插入数据1,线程2也插入数据1,于是出现了2个数据1,但是由于他们的hash值一样,其实占据的是同一个地址
而size++本身也同样不是原子操作,会导致size被多加了一次本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度