[英]Multiple threads using iterator.remove() on a single collection returning fail-fast iterator
甲骨文说
注意,Iterator.remove是在迭代过程中修改集合的唯一安全方法。 如果在进行迭代时以任何其他方式修改了基础集合,则行为未指定。
难道这意味着,即使多个线程在迭代一起同一个集合的故障快速实现的( Vector
, Hashmap
, ArrayList
, HashSet
)对象进行iterator.remove()就没有ConcurrentModificationException
抛出?
不。这告诉您,在迭代时(在一个线程中)删除元素的唯一安全方法是使用iterator.remove。 而且,如果从其他线程访问(迭代或修改了)集合-有时您将获得异常,有时则不会-通常情况下,行为不是确定性的,因此应避免使用它或依赖它。
话虽如此-唯一的例外是并发集合。
这并不意味着多线程可以使用iterator.remove()删除数据。
如果要实现它,则需要使用同步类型的集合。 即使在那种情况下,您也不应尝试在两个线程中使用相同的迭代器。 如果您有两个需要删除条目的线程,则它们每个都应具有自己的迭代器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.