java.util.ConcurrentModificationException解决方法

对HashMap, Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常

单线程例子(来自网络)

public class Test {

    public static void main(String[] args)  {

        ArrayList<Integer> list = new ArrayList<Integer>();

        list.add(2);

        Iterator<Integer> iterator = list.iterator();

        while(iterator.hasNext()){

            Integer integer = iterator.next();

            if(integer==2)

                list.remove(integer);

扫描二维码关注公众号,回复: 12826080 查看本文章

        }

    }

}

主要原因在于这个

final void checkForComodification() {

    if (modCount != expectedModCount)

    throw new ConcurrentModificationException();

}

上面的例子修改为就OK

  Iterator<Integer> iterator = list.iterator();

        while(iterator.hasNext()){

            Integer integer = iterator.next();

            if(integer==2)

                iterator.remove();   

        }

多线程

1. 加上synchronized 

2. 用CopyOnWriteArrayList,ConcurrentHasMap代替

猜你喜欢

转载自blog.csdn.net/kv110/article/details/104249095
今日推荐