java.util.ConcurrentModificationException在List.add()期间发生

时间:2012-06-28 07:03:33

标签: java list exception

我遇到了一个奇怪的问题。获得java.util.ConcurrentModificationException。但我不是在修改当前的集合。请帮忙。

方法调用

setAllAddress((List<AddressBean>) usrProfileResp.getAddressBeanList());
setShippingAddresses(getAllAddress());

方法

public List<AddressBean> getAllAddress() {
    return allAddress;
}

public void setShippingAddresses(List<AddressTokenBean> shippingAddresses) {
        shippingAddresses = new ArrayList<AddressBean>();
        List<AddressBean> addresses = getAllAddress();
        if (addresses != null && addresses.size() > 0) { 
            for (AddressBean addr : addresses) { // EXCEPTION OCCURS HERE
                if (!Constants.BILLING_ADDRESS.equals(addr.getAddressType())) {                    
                    shippingAddresses.add(addr);                
                }
            }
        }
}

2 个答案:

答案 0 :(得分:1)

最可能的解释是addressesshippingAddresses指的是同一个集合。您可以在调试器中进行检查。

getAllAddresses()是否完全使用shippingAddresses?

你确定这个集合没有在另一个线程中被修改吗?这种情况是一直发生还是偶尔发生?

答案 1 :(得分:0)

我真的不明白为什么你们都会考虑发送地址? Vanathi说,在尝试迭代

时会发生异常
  

列出地址= getAllAddress();

在for-each循环中

因此应该有一个线程可以更改'addresses'引用的数组。 BTW会在第一次迭代期间发生异常或

'getAllAddresses'的实现如下:

  

public List getAllAddress(){       return allAddress;   }

所以我得出结论,'allAddresses'只是某个类的数据成员。 这个类显然允许并发修改(另一个线程?) 这是你应该付出努力的地方......只需IMO:)

希望这有帮助