当重新调整HashMap大小的时候,确实存在条件竞争,
因为如果两个线程都发现HashMap需要重新调整大小了,它们会同时试着调整大小。
在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,
HashMap并不会将元素放在链表的尾部,而是放在头部,
HashMap需要重新调整大小时,链表中的元素的次序会反过来,放在链表的头部。
这是为了避免尾部遍历(tail traversing)。
如果条件竞争发生了,那么就死循环了。
当重新调整HashMap大小的时候,确实存在条件竞争,
因为如果两个线程都发现HashMap需要重新调整大小了,它们会同时试着调整大小。
在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,
HashMap并不会将元素放在链表的尾部,而是放在头部,
HashMap需要重新调整大小时,链表中的元素的次序会反过来,放在链表的头部。
这是为了避免尾部遍历(tail traversing)。
如果条件竞争发生了,那么就死循环了。