这是什么意思?
这意味着你从中获得的每个迭代器
ConcurrentHashMap都旨在由单个线程使用,并且不应被传递。这包括for-each循环提供的语法糖。
如果我尝试同时使用两个线程迭代地图,会发生什么情况?
如果每个线程都使用自己的迭代器,它将按预期工作。
如果在迭代过程中从地图上放置或删除值,会发生什么情况?
保证这样做不会使事情中断(这是“并发” ConcurrentHashMap含义的一部分)。但是,不能保证一个线程将看到另一线程执行的映射更改(无需从映射中获取新的迭代器)。保证迭代器在创建地图时能够反映其状态。进一步的更改可能会反映在迭代器中,但不一定如此。
总之,类似
for (Object o : someConcurrentHashMap.entrySet()) {
// …
}
几乎每次看到它都会好(或至少很安全)。



