当我执行以下代码时,我遇到了ConcurrentModificationException异常。
Collection<String> myCollection = Collections.synchronizedList(new ArrayList<String>(10));
myCollection.add("123");
myCollection.add("456");
myCollection.add("789");
for (Iterator it = myCollection.iterator(); it.hasNext();) {
String myObject = (String)it.next();
System.out.println(myObject);
myCollection.remove(myObject);
//it.remove();
}
我使用了Collections.synchronizedList,为什么还会出现异常?
当我将myCollection更改为
ConcurrentLinkedQueue<String> myCollection = new ConcurrentLinkedQueue<String>();
我不理解那个异常。
java.util.concurrent中的ConcurrentLinkedQueue和Collections.synchronizedList有什么不同之处?
Iterator.remove()
可以让你这样做。 - mreIterator
的问题。除非您通过Iterator
本身进行结构性修改,否则该组合是未定义的。 - Joachim Sauer