hashmap为什么是线程不安全的

问问题描述

hashmap为什么是线程不安全的,在线蹲一个救命答案,感谢!

答精选答案

最佳答案

1、JDK1.7中,由于多线程对HashMap进行扩容,调用了HashMap,当某个线程执行过程中,被挂起,其他线程已经完成数据迁移,等CPU资源释放后被挂起的线程重新执行之前的逻辑,数据已经被改变,造成死循环、数据丢失。

2、JDK1.8 中,由于多线程对HashMap进行put操作,调用了HashMap,假设两个线程A、B都在进行put操作,并且hash函数计算出的插入下标是相同的,当线程A执行完第六行代码后由于时间片耗尽导致被挂起,而线程B得到时间片后在该下标处插入了元素,完成了正常的插入,然后线程A获得时间片,由于之前已经进行了hash碰撞的判断,所有此时不会再进行判断,而是直接进行插入,这就导致了线程B插入的数据被线程A覆盖了,从而线程不安全。

本文来自作者[neimenggujingchazhiyexuey]投稿,不代表公众科技网立场,如若转载,请注明出处:https://www.cpst.net.cn/kexue/1445566.html

赞 (0)

发表回复

本站作者后才能评论

评论列表(4条)

  • neimenggujingchazhiyexuey
    neimenggujingchazhiyexuey 2026年10月06日

    我是公众科技网的签约作者“neimenggujingchazhiyexuey”!

  • neimenggujingchazhiyexuey
    neimenggujingchazhiyexuey 2026年10月06日

    希望本篇文章《hashmap为什么是线程不安全的》能对你有所帮助!

  • neimenggujingchazhiyexuey
    neimenggujingchazhiyexuey 2026年10月06日

    本站[公众科技网]内容主要涵盖:教育咨询,知识百科

  • neimenggujingchazhiyexuey
    neimenggujingchazhiyexuey 2026年10月06日

    本文概览:1、JDK1.7中,由于多线程对HashMap进行扩容,调用了HashMap,当某个线程执行过程中,被挂起,其他线程已经完成数据迁移,等CPU资源释放后被挂起的线程重新执行之前的逻辑,数据已经被改变,造成死循环、数据丢失。2、JDK1.8 中,由于多线程对HashMap进行put操作,调用了HashMap,假设两个线程A、B都在进行put操作,并且hash函数计算出的插入下标是相同的,当线程A执行完第六行代码后由于时间片耗尽导致被挂起,而线程B得到时间片后在该下标处插入了元素,完成了正常的插入,然后线程A

联系我们

联系:143 0457 151

工作时间:周一至周五,9:30-18:30,节假日休息

关注我们