list动态remove处理并发异常ConcurrentModificationException 问题

来源:互联网 发布:ubuntu kylin社区 编辑:程序博客网 时间:2024/06/06 01:58

List类型的数据进行remove操作时会报并发修改异常ConcurrentModificationException问题,这是由于集合遍历是使用Iterator, Iterator是工作在一个独立的线程中,并且拥有一个互斥锁。Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast原则 Iterator 会马上抛出java.util.ConcurrentModificationException 异常。所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。

要解决这个问题有两种方式:

   方式1:

        将每次处理的list结果放在另外一个list中,再对结果list进行操作;

   方式2:

       Iterator<泛型> it = 要处理的list.iterator();
 while(it.hasNext()){

                     it.remove();

                  }

阅读全文
0 0
原创粉丝点击