0

甲骨文

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

这是否意味着即使多个线程一起迭代一个集合的快速失败实现的 ( Vector, Hashmap, ArrayList, HashSet) 对象执行iterator.remove()也不会ConcurrentModificationException抛出?

4

2 回答 2

2

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

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

于 2016-07-05T10:59:03.740 回答
0

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

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

于 2016-07-05T10:55:27.357 回答