gpt4 book ai didi

java - 关于 ConcurrentHashMap javadoc 的说明

转载 作者:行者123 更新时间:2023-11-29 07:55:57 25 4
gpt4 key购买 nike

以下引述的最后一点我不是很清楚:

Retrieval operations (including get) generally do not block, so may overlap with update operations (including put and remove). Retrievals reflect the results of the most recently completed update operations holding upon their onset. For aggregate operations such as putAll and clear, concurrent retrievals may reflect insertion or removal of only some entries.

为什么只有一些条目?

最佳答案

第一部分和最后一部分必须一起阅读才能理解。分解它,我们得到:

  • 检索操作(包括获取)一般不会阻塞,因此它们可能与更新操作重叠
  • 检索反射(reflect)了最近完成的更新操作的结果在它们开始时保持不变

现在,考虑在 putAll 的情况下会发生什么(这是 ConcurrentHashMap.java 源代码):

for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
put(e.getKey(), e.getValue());

注意它在循环中将每个条目添加到 map 中。如果您使用 100 个条目调用 putAll,并且完成了 50%,另一个线程尝试从 map 中获取一个值,只有 50 个条目提供给 putAll 将在那时可用。

具体来说:文档并未通知您特定条目将不可用,只是在您调用 get 之前整个聚合操作可能未完成 在另一个线程中,因为它们彼此不同步。

关于java - 关于 ConcurrentHashMap javadoc 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17655244/

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