本文介绍了java.util.ConcurrentModificationException的ArrayList中的处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
java.util.ConcurrentModificationException
在java.util.AbstractList中的$ Itr.checkForComodification(AbstractList.java:372)
在java.util.AbstractList中的$ Itr.next(AbstractList.java:343)
在com.alpha.beta.purchasing.item.VendorItemList.loadItems(VendorItemList.java:51)
在com.alpha.beta.purchasing.Shipment.loadItems(Shipment.java:1006)
在com.alpha.beta.purchasing.Shipment.loadItems(Shipment.java:953)
在com.alpha.beta.purchasing.Shipment.getItemTotal(Shipment.java:1503)
在com.alpha.beta.purchasing.Shipment.getShipmentTotal(Shipment.java:854)
在com.alpha.beta.quickreports.PurchasingGenericListSourceMapper.fillPurchaseReceivingItemListForQuickReportsTask(PurchasingGenericListSourceMapper.java:144)
在com.alpha.beta.quickreports.PurchasingGenericListSourceMapper$2.run(PurchasingGenericListSourceMapper.java:105)
在java.util.TimerThread.mainLoop(Timer.java:512)
在java.util.TimerThread.run(Timer.java:462)
我上面提到的异常和源$ C $ C是获得如下:
公共无效loadItems(ArrayList的列表){
如果(名单= NULL&放大器;!&安培;则为list.size()0){
super.clear();
迭代器迭代器= list.iterator();
而(iterator.hasNext()){
// VendorItem项目=(VendorItem)iterator.next();
//负载(新的整数(item.getVendorItemId()),项目); obj对象= iterator.next(); //<<这就是它说的异常来
如果(OBJ的instanceof InvoiceItem){
InvoiceItem项目=(InvoiceItem)目标文件;
负载(新的整数(item.getInvoiceItemId()),项目);
//logger.debug(\"**装载发票项目+ item.toString());
}
否则,如果(OBJ的instanceof PurchaseOrderItem){
PurchaseOrderItem项目=(PurchaseOrderItem)目标文件;
负载(新的整数(item.getPoItemId()),项目);
//logger.debug(\"**装载订单项目+ item.toString());
}
否则,如果(OBJ的instanceof ShipmentItem){
ShipmentItem项目=(ShipmentItem)目标文件;
负载(新的整数(item.getShipmentItemId()),项目);
logger.debug(**装载ShipmentItem物品+ item.toString());
}
//
否则,如果(OBJ的instanceof VendorItem){
VendorItem项目=(VendorItem)目标文件;
负载(新的整数(item.getVendorItemId()),项目);
logger.debug(**装载VendorItem+ item.toString());
}
//
其他{
logger.debug(***没有发票/ PO /货项目);
}
}
}}
我已经看到了相关的问题,但他们不符合我的情况,所以我希望,如果有人能说出真正的原因为什么发生这种情况。
解决方案
ArrayList是不同步的。这意味着,在TimerThread别的正在修改的ArrayList。
下面的文档说什么:
List list = Collections.synchronizedList(new ArrayList(...));
Wrapping this list using Collections.synchronizedList() should fix the problem.
这篇关于java.util.ConcurrentModificationException的ArrayList中的处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!