【发布时间】:2013-12-10 13:46:24
【问题描述】:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at com.alpha.beta.purchasing.item.VendorItemList.loadItems(VendorItemList.java:51)
at com.alpha.beta.purchasing.Shipment.loadItems(Shipment.java:1006)
at com.alpha.beta.purchasing.Shipment.loadItems(Shipment.java:953)
at com.alpha.beta.purchasing.Shipment.getItemTotal(Shipment.java:1503)
at com.alpha.beta.purchasing.Shipment.getShipmentTotal(Shipment.java:854)
at com.alpha.beta.quickreports.PurchasingGenericListSourceMapper.fillPurchaseReceivingItemListForQuickReportsTask(PurchasingGenericListSourceMapper.java:144)
at com.alpha.beta.quickreports.PurchasingGenericListSourceMapper$2.run(PurchasingGenericListSourceMapper.java:105)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
我得到了上面提到的异常,源代码如下:
public void loadItems(ArrayList list) {
if(list != null && list.size() > 0) {
super.clear();
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
// VendorItem item = (VendorItem)iterator.next();
//load(new Integer(item.getVendorItemId()), item);
Object obj = iterator.next(); // << This is where it says exception comes
if(obj instanceof InvoiceItem) {
InvoiceItem item = (InvoiceItem)obj;
load(new Integer(item.getInvoiceItemId()), item);
//logger.debug("** loading invoice Item " + item.toString());
}
else if(obj instanceof PurchaseOrderItem) {
PurchaseOrderItem item = (PurchaseOrderItem)obj;
load(new Integer(item.getPoItemId()), item);
//logger.debug("** loading PO Item " + item.toString());
}
else if(obj instanceof ShipmentItem) {
ShipmentItem item = (ShipmentItem)obj;
load(new Integer(item.getShipmentItemId()), item);
logger.debug("** loading ShipmentItem Item " + item.toString());
}
//
else if(obj instanceof VendorItem) {
VendorItem item = (VendorItem)obj;
load(new Integer(item.getVendorItemId()), item);
logger.debug("** loading VendorItem " + item.toString());
}
//
else {
logger.debug("*** neither invoice/PO/shipment item");
}
}
}
}
我已经看到了相关的问题,但它们不符合我的情况,所以我希望有人能指出发生这种情况的真正原因。
【问题讨论】:
-
问题的真正原因似乎不在这些行中。你在负载中做什么?你有没有把一些东西列入清单?
标签: java concurrency arraylist iterator concurrentmodification