gpt4 book ai didi

java - 在 ConcurrentHashMap 上使用 forEach 时,是否会反射(reflect)更新,或者它的行为是否像故障安全迭代器?

转载 作者:行者123 更新时间:2023-11-30 06:05:23 25 4
gpt4 key购买 nike

如果我启动 forEach对 ConcurrentHashMap 执行操作,并且其他线程仍在该映射上执行 put,我会看到其他 bin 中的新更新吗?

这样做的原因是我试图找到最有效的方法来将 ConcurrentHashMap 的内容广播给监听器,而不会导致新数据写入映射的争用。但我希望当我通知监听器时,所有监听器都能收到相同的 Map 快照。

最佳答案

It's not fail safe ,但更新并不会以您认为的方式反射(reflect);因此,如果您之前见过某个垃圾箱,您将无法再从该垃圾箱获取更新。

如果你知道 spread 内部是如何工作的,你甚至可能会导致 OOM(这是我从 Holger 回答的一个问题中的一个很好的评论,但我现在似乎找不到它...)

ConcurrentHashMap<Integer, Integer> chm = new ConcurrentHashMap<>(500_000_000); 
chm.put(1, 1);
chm.forEach((key, value) -> chm.put(++value^(value>>>16), value));

关于java - 在 ConcurrentHashMap 上使用 forEach 时,是否会反射(reflect)更新,或者它的行为是否像故障安全迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718113/

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