gpt4 book ai didi

java - 调整大小时多线程环境中的 HashMap

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:22 24 4
gpt4 key购买 nike

我正在学习一个教程,它基本上解释了在多线程环境中调整 Hashmap 大小时发生竞争条件的原因:

In Java, if two thread at the same time found that now HashMap needs resizing and they both try to resizing. on the process of resizing of HashMap in Java , the element in bucket which is stored in linked list get reversed in order during their migration to new bucket because java HashMap doesn't append the new element at tail instead it append new element at head to avoid tail traversing. If race condition happens then you will end up with an infinite loop

读完后我有两个问题:

  1. 为什么每个桶的链表是按顺序颠倒的?
  2. 我可以看到可能存在竞争条件,但看不到无限循环是如何产生的?是不是因为一个线程可能将元素头追加到尾,而另一个线程以相反的顺序进行?

请帮我澄清一下,非常感谢!

最佳答案

第一个问题的答案在引用的文本中:

"because java HashMap doesn't append the new element at tail instead it append new element at head to avoid tail traversing"

如果 HashMap 要按插入顺序存储它们,则它必须在每次插入时遍历列表或存储指向列表末尾的额外指针(并维护它)。无论如何,按插入顺序将元素存储在桶中不会带来任何好处(至少我想不出有什么好处)。

第二个问题的答案在这里:

http://mailinator.blogspot.hu/2009/06/beautiful-race-condition.html

关于java - 调整大小时多线程环境中的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com