gpt4 book ai didi

java - WeakHashMap 与并发修改

转载 作者:行者123 更新时间:2023-11-30 06:04:51 24 4
gpt4 key购买 nike

我正在阅读有关 WeakHashMap 的 Java 文档我得到了基本概念。由于 GC 线程在后台运行,您可能会出现“异常行为”,例如迭代时出现 ConcurrentModificationException 等。

我不明白的是,如果默认实现不是同步的并且不以任何方式包含锁,那么为什么不可能获得不一致的状态。假设你有 2 个线程。一个 GC 线程在某个索引处删除一些键,同时在同一索引处,一个用户线程正在向数组中插入一个键值对。

对我来说,如果没有同步,那么得到不一致的 HashMap 的风险很高。

更糟糕的是,做这样的事情实际上可能非常危险,因为 v 实际上可能为空。

if (map.contains(k)) {
V v = map.get(k)
}

我错过了什么吗?

最佳答案

你说的状态不一致的问题不会出现是因为GC没有主动重构WeakHashMaps。当垃圾收集器释放弱引用的引用对象时,相应的条目并没有从映射中物理删除;条目只是变得陈旧,没有 key 。稍后,该条目可能会在 map 上的某些其他操作期间被物理删除,但 GC 不会承担该责任。

您可以在 grepcode 上看到一个 Java 版本对此设计的实现。 .

关于java - WeakHashMap 与并发修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48411077/

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