首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中重新散列时阻塞或NonBlocking添加元素

在Java中重新散列时阻塞或NonBlocking添加元素
EN

Stack Overflow用户
提问于 2018-05-15 16:19:46
回答 2查看 412关注 0票数 0

正如在HashMap文档中给出的,当HashMap已满75%时,HashMap在内部执行对所有现有对象的重新散列。

如果在执行重散列时添加了任何元素,则为->

  • 我们有HashMap的阻塞行为吗?-意味着重哈希将首先完成,然后添加元素。

  • 我们是否有非阻塞行为的HashMap -意味着重新哈希将允许添加元素之间的重新哈希过程。

在重新散列过程中,HashMap是如何处理添加新元素的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-15 16:35:19

来自Javadoc

注意,此实现不是同步的. If多线程并发访问哈希映射,并且至少有一个线程在结构上修改映射,因此必须在外部同步。

您必须应用外部同步;否则,在多个线程访问的情况下,映射的状态可能会损坏。

如果您正在同步,则在映射重新排列自身时,不能添加其他元素。

如果不同步,则不使用文档中的类,因此行为是未定义的。

票数 1
EN

Stack Overflow用户

发布于 2018-05-15 16:41:14

它没有阻塞,但它也不会“允许在重哈希进程之间添加元素”。java.util.HashMap被记录为线程不安全。如果在重新散列过程中试图在地图上添加或删除元素,则会出现不一致的行为。

您可能想考虑使用java.util.concurrent.ConcurrentHashMap

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50354957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档