hashmap为什么是线程不安全的
来源:隽清芬栏目:生活时间:2024-05-22 05:25:20
1、JDK1.7中,由于多线程对HashMap进行扩容,调用了HashMap,当某个线程执行过程中,被挂起,其他线程已经完成数据迁移,等CPU资源释放后被挂起的线程重新执行之前的逻辑,数据已经被改变,造成死循环、数据丢失。
2、JDK1.8 中,由于多线程对HashMap进行put操作,调用了HashMap,假设两个线程A、B都在进行put操作,并且hash函数计算出的插入下标是相同的,当线程A执行完第六行代码后由于时间片耗尽导致被挂起,而线程B得到时间片后在该下标处插入了元素,完成了正常的插入,然后线程A获得时间片,由于之前已经进行了hash碰撞的判断,所有此时不会再进行判断,而是直接进行插入,这就导致了线程B插入的数据被线程A覆盖了,从而线程不安全。
免责声明:该内容由用户自行上传分享到《 秘密研究社》,仅供个人学习交流分享。本站无法对用户上传的所有内容(包括且不仅限于图文音视频)进行充分的监测,且有部分图文资源转载于网络,主要用于方便广大网友在线查询参考学习,不提供任何商业化服务。若侵犯了您的合法权益,请立即通知我们( 管理员邮箱:[email protected]),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!!