在正常情况下,它会使哈希图处于不一致的状态,在这种状态下添加和检索的键值对可能不同。除此之外,还会出现其他令人惊讶的行为,例如NullPointerException。 在最坏的情况下,它可能导致无限循环。是。你答对了。它可能导致无限循环。你问什么,如何?好吧,这就是原因。 HashMap具有达到其大小上限时重新哈希的概念。重新哈希处理是创建新内存区域,然后在新内存中复制所有已经存在的键值对的过程。可以说,线程A尝试将键值对放入映射中,然后开始重新哈希。同时,线程B来了,并开始使用put操作来操作存储桶。 在进行重新哈希处理的过程中,有机会生成循环依赖关系,其中链表中的任何元素(在任何存储桶中)都可以指向同一存储桶中的任何先前节点。这将导致无限循环,因为重新哈希处理的代码包含一个 “ while(true){//获取下一个节点; }”块,并且在循环依赖性下它将无限运行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。