在Java中:List.iterator()
是线程安全的,即返回的迭代器是在任何时间反射(reflect)列表的当前状态,还是仅在创建列表时反射(reflect)列表的状态?
最佳答案
List.iterator()的行为未定义或与其他List实现保持一致。
对于ArrayList,LinkedList,如果在迭代列表时对其进行了修改,则可以获得ConcurrentModificationException。 (这不能保证)避免此问题的方法是使用syncedList()并在遍历列表时锁定列表。
对于Vector,集合是同步的,但是迭代器不是线程安全的。
对于CopyOnWriteArrayList,在调用iterator()时会获得列表中元素的快照,此迭代器是线程安全的,不需要使用任何锁定。注意:元素的内容可以更改。