ConcurrentModificationException未发生

时间:2015-03-02 09:16:25

标签: java concurrency crash

我有以下代码:

List list = getItems(); //where getItems() returns List<Item>


        do {
            list.add(adPosition);
            adPosition = adPosition + (AD_REPEAT_VALUE + 1);
            adsNumber++;
        } while (adsNumber < MAX_NUMBER_OF_ADS && adPosition < list.size());

据我所知,此代码应该因ConcurrentModificationException而崩溃,因为列表大小已被修改。但它并没有崩溃。这怎么可能?!

2 个答案:

答案 0 :(得分:2)

向列表添加元素是完全合法的。请参阅ConcurrentModificationException上的文档:当您同时添加和迭代列表时抛出它:

Iterator it = list.iterator();
while (it.hasNext()) {
    list.add(elem); // ConcurrentModificationException thrown here
}

答案 1 :(得分:1)

当我们在List(或基本上迭代列表)对象上使用迭代器并同时实际列表更改时,抛出

Concurrent Modification异常。