hashmap并发死循环

背景分析

hash结构能够将搜索的复杂度降低到O(1),但却引入了hash碰撞的问题(本质是空间有限)
解决hash碰撞有如下两种思路:
  1. 开放地址
    如果发生冲突则向后查找空位,遇尾则跳到头部
  2. 链地址
    在节点后面插入链表来保存冲突元素
  3. 再hash、公共溢出区
    如果冲突则采用另外一个hash算法,一直重复
    把所有的冲突元素放到一个公共的区域
java中的hashmap采用了链地址方式,当map中的元素达到阈值(容量的80%),则建立新的数组并将原数组中的数据重新hash到新数组中

问题:在重hash的过程中,由于链表中元素的顺序无关紧要,采用了从头遍历原链表然后插入到新链表中的链表头部(顺序无关,插入头部避免遍历整个新链表),则链表的顺序则倒排了,而在多线程情况下出现了环形链表

你可能感兴趣的:(hashmap并发死循环)