concurrenthashmap的foreach方法是线程安全的吗?

zazmityj  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(620)

这个问题在这里已经有答案了

java concurrenthashmap和for each循环(2个答案)
四天前关门了。
如果要迭代concurrenthashmap中的所有元素,则使用 forEach 方法线程安全?

pzfprimi

pzfprimi1#

这取决于你所说的线程安全。
如果您对其他线程可以在您处于 forEach 呼叫,然后是的,它是线程安全的。
如果你想让Map在 forEach 正在进行中,因此其他线程被阻止或出错如果它们尝试修改它,则不会。
api文档说明:
但是,即使所有操作都是线程安全的,检索操作也不需要锁定,并且不支持以阻止所有访问的方式锁定整个表。
...
类似地,迭代器、拆分器和枚举返回反映哈希表在创建迭代器/枚举时或之后某个点的状态的元素。他们不扔 ConcurrentModificationException .... 记住,聚合状态方法的结果。。。通常仅当Map未在其他线程中进行并发更新时才有用。否则,这些方法的结果反映的 transient 可能足以用于监视或估计目的,但不足以用于程序控制。

相关问题