在迭代过程中插入列表是不安全的?

时间:2013-03-27 03:24:02

标签: java concurrency

在迭代过程中插入列表是不是安全?思考?我个人不确定......

2 个答案:

答案 0 :(得分:1)

如果使用Iterator对象迭代集合,则更改底层集合将创建一个ConcurrentModificationError,这将导致代码崩溃。即使您使用for-each循环,这也适用,因为这种类型的循环隐式声明Iterator

More information on ConcurrentModificationException.

答案 1 :(得分:1)

正如我所料,它抛出了ConcurrentModificationException。 我用简单的例子测试它:

public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        for(Iterator<Integer> it = list.iterator(); it.hasNext();it.next()){
            System.out.println(it.toString());
            list.add(4);
        }
    }
}

将ArrayList更改为LinkedList会得到相同的结果。 如果我记得确切只有删除操作有效