java - 阻塞或非阻塞 - 在 Java 的 HashMap 中重新散列期间添加元素

标签 java hash hashmap blocking nonblocking

正如 HashMap 文档中所述,当 HashMap 已满 75% 时,HashMap 会在内部对所有现有对象执行重新哈希。

如果在执行重新哈希时添加了任何元素 ->

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

或者

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

HashMap 如何在重新哈希时处理添加新元素?

最佳答案

来自Javadoc :

Note that this implementation is not synchronized. If multiple threads access a hash map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally.

您必须应用外部同步;否则映射的状态可能会在多个线程访问时被破坏。

如果您正在同步,则在 map 重新排列自身时无法添加其他元素。

如果您没有同步,则表示您没有使用记录的类,因此行为未定义。

关于java - 阻塞或非阻塞 - 在 Java 的 HashMap 中重新散列期间添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354957/

相关文章:

java - 使用具有 Maps 键集的流时出现 ConcurrentModificationException

java - @BatchSize 在 Hibernate 中如何工作深入解释?

PHP Murmurhash3 和 MySql Murmurhash3 有时不匹配

java - 二次探测不会命中素数哈希表中的所有元素

javascript - JavaScript 中的通用 2D 哈希?

java - 在 Java HashMap 中保留一对原语

java - 获取 HashMap 的子列表

java - 使 editText 提示斜体?

java - 与 xml 配置文件相比,注释(非编译器)的优点/缺点是什么

java - 将 HashMap<String, String> 转换为 HashMap<String, List<String>>()