odificationException的ArrayList中的

odificationException的ArrayList中的

本文介绍了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中的处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-03 20:00