我不知道爲什麼當我迭代ArrayList時發生ConcurrentModificationException。 ArrayList是methode的作用域,所以它不應該被執行相同代碼的其他線程看到。至少如果我正確地理解了多線程和變量作用域。ArrayLists上ConcurrentModificationException的原因iterator.next()
Caused by: java.util.ConcurrentModificationException
at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
at com....StrategyHandler.applyStrategy(StrategyHandler.java:184)
private List<Order> applyStrategy(StorageObjectTree storageObjectTree) {
...
List<OrderHeader> finalList = new ArrayList<Order>();
for (StorageObject storageObject : storageObjectTree.getStorageObjects()) {
List<Order> currentOrders = strategy.process(storageObject);
...
if (currentOrders != null) {
Iterator<Order> iterator = currentOrders.iterator();
while (iterator.hasNext()) {
Order order = (Order) iterator.next(); // line 64
// read some values from order
}
finalList.addAll(currentOrders);
}
}
return finalList;
}
有人可以給我一個提示什麼可能是問題的根源?
不要將iterator.next()轉換爲Order – newbieee
@newbieee:雖然轉換是不必要的,但這不是問題的原因。 –
你沒有添加或刪除currentOrders的任何值的權利? – paul