Oracle says
请注意,Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代进行过程中以任何其他方式修改基础集合,则行为未指定。
这是否意味着即使多个线程在同一个集合的快速实施中(<{1}}重复一起 ,Vector
,Hashmap
,ArrayList
)对象执行 iterator.remove()不会抛出HashSet
?
答案 0 :(得分:2)
没有。这告诉你,在迭代(在一个线程中)中删除元素的唯一安全方法是使用iterator.remove。如果从其他线程访问(迭代或修改)集合 - 有时你会得到异常,有时候不会 - 通常行为不是确定性的,所以你应该避免使用它或依赖它。
话虽如此 - 唯一的例外是Concurrent集合。
答案 1 :(得分:0)
这并不意味着多线程可以使用iterator.remove()删除数据。
如果要实现它,则需要使用同步类型的集合。即使在这种情况下,您也不应该尝试在两个线程中使用相同的迭代器。如果你有两个线程需要删除条目,那么它们每个都应该有自己的迭代器。