【发布时间】:2018-01-23 21:24:57
【问题描述】:
我正在阅读有关WeakHashMap 的Java Doc,我了解了基本概念。 由于 GC 线程在后台运行,可能会出现“异常行为”,例如迭代时的 ConcurrentModificationException 等。
我不明白的是,如果默认实现不同步并且不包含任何方式的锁,那么为什么不可能获得不一致的状态。 假设你有 2 个线程。 GC线程删除某个索引处的某个键,同时在同一索引处,用户线程正在向数组中插入一个键值对。
对我来说,如果没有同步,那么得到不一致的哈希映射的风险很高。
更糟糕的是,这样做实际上可能非常危险,因为 v 实际上可能为 null。
if (map.contains(k)) {
V v = map.get(k)
}
我错过了什么吗?
【问题讨论】:
标签: java multithreading concurrency garbage-collection