ubu*_*oid 20 java collections iterator list thread-safety
在Java中:是否是List.iterator()
线程安全的,即返回的迭代器是在任何时候反映列表的当前状态还是仅在列表创建时反映列表的状态?
Pet*_*rey 33
List.iterator()的行为未定义或与不同的List实现一致.
对于ArrayList,LinkedList,如果在迭代时修改了列表,则可以获得ConcurrentModificationException.(这不能保证)避免此问题的方法是使用synchronizedList()并在迭代时锁定列表.
对于Vector,集合是同步的,但迭代器不是线程安全的.
对于CopyOnWriteArrayList,您在调用iterator()时获得列表中元素的快照,此迭代器是线程安全的,您不需要使用任何锁定.注意:元素的内容可以更改.
没有迭代器是线程安全的.如果在迭代中更改了基础集合,ConcurrentModificationException
则抛出a.
即使是同步集合的迭代器也不是线程安全的 - 您必须手动同步.
一个例外是CopyOnWriteArrayList
,它在迭代期间保存快照.
归档时间: |
|
查看次数: |
21136 次 |
最近记录: |