public synchronized X getAnotherX(){
if(iterator.hasNext()){
X b = iterator.next();
String name = b.getInputFileName();
...
return b;
}
else{return null;}
}
尽管声明 header 中有同步语句,但在我使用 iterator.next(); 的那一行我仍然得到一个 ConcurrentModificationException 异常;这里有什么问题吗?
最佳答案
ConcurrentModificationException 通常与多线程无关。大多数情况下,它的发生是因为您正在修改它在迭代循环体内迭代的集合。例如,这会导致:
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
Item item = (Item) iterator.next();
if (item.satisfiesCondition()) {
collection.remove(item);
}
}
在这种情况下,您必须改用iterator.remove() 方法。如果您要添加到集合中,这种情况同样会发生,在这种情况下没有通用的解决方案。但是,如果处理列表,则可以使用子类型 ListIterator,它有一个 add() 方法。
关于java - ConcurrentModificationException 尽管使用同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655362/