Java中的迭代器无效规则



我正在研究Java中的迭代器无效规则,但我找不到像这样的C++信息。我为java找到的所有东西都更通用,比如这个。有没有我可以遵循的文档?

Java"集合框架概述";文件显示

通用实现支持集合接口中的所有可选操作,并且对它们可能包含的元素没有限制。它们是不同步的,但Collections类包含称为同步包装器的静态工厂,可用于向许多不同步的集合添加同步。所有新的实现都有快速故障迭代器,它可以检测无效的并发修改,并且快速而干净地失败(而不是行为不稳定(。

Java具有并发线程安全集合实现。它们是java.util.concurrent包的一部分,医生说

大多数并发集合实现(包括大多数队列(与通常的java.util约定的不同之处还在于Iterator和Spliterators提供弱一致性,而不是快速故障遍历:

  • 它们可以与其他操作同时进行
  • 他们永远不会抛出ConcurrentModificationException
  • 它们保证在建造时只穿过一次存在的元素,并且可能(但不保证(反映施工后的任何修改

例如ConcurrentHashMap

类似地,迭代器、Spliterators和Enumerations返回的元素反映了创建迭代器/枚举时或之后某个时刻的哈希表状态。它们不会引发ConcurrentModificationException。然而,迭代器被设计为一次只能由一个线程使用。请记住,聚合状态方法(包括size、isEmpty和containsValue(的结果通常只有在映射未在其他线程中进行并发更新时才有用。否则,这些方法的结果反映的瞬态可能足以用于监测或估计目的,但不足以用于程序控制。

所以简单的答案是:如果你想在集合可能被另一个线程更改时对其进行迭代,只需使用并发实现集合。这个java迭代器在";C++的意思是";

或者只使用线程不安全集合并捕获ConcurrentModificationException来修复集合修改问题。在这种情况下,java迭代器在";C++的意思是";。

最新更新