繁体   English   中英

多个线程在单个集合上使用iterator.remove()返回失败快速迭代器

[英]Multiple threads using iterator.remove() on a single collection returning fail-fast iterator

甲骨文

注意,Iterator.remove是在迭代过程中修改集合的唯一安全方法。 如果在进行迭代时以任何其他方式修改了基础集合,则行为未指定。

难道这意味着,即使多个线程在迭代一起同一个集合的故障快速实现的( VectorHashmapArrayListHashSet )对象进行iterator.remove()就没有ConcurrentModificationException抛出?

不。这告诉您,在迭代时(在一个线程中)删除元素的唯一安全方法是使用iterator.remove。 而且,如果从其他线程访问(迭代或修改了)集合-有时您将获得异常,有时则不会-通常情况下,行为不是确定性的,因此应避免使用它或依赖它。

话虽如此-唯一的例外是并发集合。

这并不意味着多线程可以使用iterator.remove()删除数据。

如果要实现它,则需要使用同步类型的集合。 即使在那种情况下,您也不应尝试在两个线程中使用相同的迭代器。 如果您有两个需要删除条目的线程,则它们每个都应具有自己的迭代器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM