开发者社区> 问答> 正文

如何在多线程应用程序中的非同步代码中使用HashMap

Java Map ,是有之后有什么好处?

展开
收起
YDYK 2020-04-26 10:01:11 611 0
1 条回答
写回答
取消 提交回答
  • 在正常情况下,它会使哈希图处于不一致的状态,在这种状态下添加和检索的键值对可能不同。除此之外,还会出现其他令人惊讶的行为,例如NullPointerException。 在最坏的情况下,它可能导致无限循环。是。你答对了。它可能导致无限循环。你问什么,如何?好吧,这就是原因。 HashMap具有达到其大小上限时重新哈希的概念。重新哈希处理是创建新内存区域,然后在新内存中复制所有已经存在的键值对的过程。可以说,线程A尝试将键值对放入映射中,然后开始重新哈希。同时,线程B来了,并开始使用put操作来操作存储桶。 在进行重新哈希处理的过程中,有机会生成循环依赖关系,其中链表中的任何元素(在任何存储桶中)都可以指向同一存储桶中的任何先前节点。这将导致无限循环,因为重新哈希处理的代码包含一个 “ while(true){//获取下一个节点; }”块,并且在循环依赖性下它将无限运行。

    2020-04-26 10:01:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
多线程 立即下载
Redis多线程性能优化 立即下载