你知道为什么HashMap是线程不安全的吗

JDK1.7中的HashMap

  • 在HashMap的扩容函数transfer函数中,在对table进行扩容到newTable后,需要将原来数据转移到newTable中,使用的是头插法,也就是链表的顺序会翻转,可能会造成数据丢失,形成环形链表,造成死循环

JDK1.8中HashMap

  • 在jdk1.8中对HashMap进行了优化,在发生hash碰撞,不再采用头插法方式,而是尾插法,直接插入链表尾部,因此不会出现环形链表的情况,但是在多线程的情况下仍然不安全,会发生数据覆盖的情况。

 

参考:

posted @ 2023-03-16 21:52  残城碎梦  阅读(14)  评论(0编辑  收藏  举报