我有一个非常简单的代码片段,用于填充向量,遍历它,然后清除它.这基本上就是我原则上的尝试:
vector v = new Vector();
v.add(1);
v.add(2);
v.add(3);
ListIterator iter = v.listIterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
v.clear()
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个ConcurrentModificationException.
从阅读中看,显然以某种方式使用"同步"是解决方案.但我看到了几种不同的方法,我想知道在我的情况下解决这个问题的最佳,最简单的方法是什么(没有明确的线程参与)?
如果不涉及任何线程,则您发布的示例可能不完整.
ConcurrentModificationException如果您在迭代时修改集合,则可能会发生这种情况.
请注意,此异常并不总是表示某个对象已被另一个线程同时修改.如果单个线程发出违反对象合同的一系列方法调用,则该对象可能会抛出此异常.例如,如果一个线程在使用失败快速迭代器迭代集合时直接修改了一个集合,那么迭代器将会抛出此异常.
并且文档Vector.listIterator()明确指出:
请注意,此实现返回的列表迭代器将抛出UnsupportedOperationException以响应其remove,set和add方法,除非重写了列表的remove(int),set(int,Object)和add(int,Object)方法.
(实际上,文档适用于AbstractList.listIterator(int); Vector不会重新定义.)
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |