【hashmap为什么是线程不安全的】
演示机型:华为MateBook X
系统版本:win101、JDK1.7中,由于多线程对HashMap进行扩容,调用了HashMap,当某个线程执行过程中,被挂起,其他线程已经完成数据迁移 , 等CPU资源释放后被挂起的线程重新执行之前的逻辑,数据已经被改变,造成死循环、数据丢失 。
2、JDK1.8 中 , 由于多线程对HashMap进行put操作,调用了HashMap,假设两个线程A、B都在进行put操作,并且hash函数计算出的插入下标是相同的,当线程A执行完第六行代码后由于时间片耗尽导致被挂起,而线程B得到时间片后在该下标处插入了元素,完成了正常的插入 , 然后线程A获得时间片,由于之前已经进行了hash碰撞的判断,所有此时不会再进行判断,而是直接进行插入,这就导致了线程B插入的数据被线程A覆盖了 , 从而线程不安全 。
推荐阅读
- 葡萄白粉病防治技术是什么
- 正确抓蛇的部位是哪里
- 亳州特产 亳州特产是
- 奶牛是什么动物
- QQ5月10号关闭是怎么回事,手机qq回应qq关闭谣言
- 大佬留言正正正是什么意思
- 腰和腿围很粗但看上去没那么粗 为什么腿围不粗但看起来很粗呢
- 奶牛饲料配方
- 人类为什么有等级的划分
- 中国梦基本的内涵是哪