本文最后更新于60 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
在JDK7及之前版本的HashMap在多线程可能存在死循环问题,这是因为当一个桶位中有多个元素需要扩容时,多个线程同时对链表进行操作,头插法可能导致链表节点指向错误的位置,从而形成一个环形链表,出现死循环问题。
在JDK8版本的HashMap采用尾插法,使得插入的节点永远都是在链表的末尾,避免了环形链表形成,但仍没解决数据覆盖问题,因此在多线程并发环境下,建议使用ConcurrentHashMap。