Java 是ConcurrentHashMap';什么是forEach方法线程安全?

Java 是ConcurrentHashMap';什么是forEach方法线程安全?,java,multithreading,thread-safety,concurrenthashmap,Java,Multithreading,Thread Safety,Concurrenthashmap,如果要迭代ConcurrentHashMap中的所有元素,是否使用forEach方法线程安全?这取决于线程安全的含义 LI>如果其他线程能够在“代码”>“前缀调用”的中间修改地图,则是线程安全的。 如果您希望在forEach正在进行时映射不可修改,从而导致其他线程被阻止或出错(如果他们试图修改它),则不可以 报告说: 但是,即使所有操作都是线程安全的,检索操作也不需要锁定,并且不支持以阻止所有访问的方式锁定整个表 类似地,迭代器、拆分器和枚举返回元素,这些元素反映了在迭代器/枚举创建时或

如果要迭代ConcurrentHashMap中的所有元素,是否使用
forEach
方法线程安全?

这取决于线程安全的含义

    <> LI>如果其他线程能够在“代码”>“前缀调用”的中间修改地图,则是线程安全的。
  • 如果您希望在
    forEach
    正在进行时映射不可修改,从而导致其他线程被阻止或出错(如果他们试图修改它),则不可以
报告说:

但是,即使所有操作都是线程安全的,检索操作也不需要锁定,并且不支持以阻止所有访问的方式锁定整个表

类似地,迭代器、拆分器和枚举返回元素,这些元素反映了在迭代器/枚举创建时或创建之后某个点的哈希表状态。它们不会抛出
ConcurrentModificationException
。。。。请记住,聚合状态方法的结果。。。通常仅当映射未在其他线程中进行并发更新时才有用。否则,这些方法的结果反映的瞬态可能足以用于监测或估计目的,但不适用于程序控制


请参阅。“检索”操作与迭代值不同。这意味着使用键
获取一个值。@Deadbeef它是-此处的警告适用。当您在迭代的中途将一个条目放入该地图时,CHM impl可以自由地投掷一枚邪恶的硬币并在其上进行迭代,也可以不进行迭代,具体取决于硬币翻转。(从某种意义上说,墨菲定律会确保每次开发和测试服务器上的硬币都是正面的,然后当你把演示给大的潜在客户时,它就会开始倒转尾巴,只是为了搞乱你)。CHM必须包含或不包含它。与j.u.HM不同,j.u.HM可以碰撞、投掷、包含、不包含、跳过20个键或跳吉格舞。