A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.itcast1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class OutCollection {

        /**
         集合发生的 并发异常  ConcurrentModificationException
         */
        public static void main(String[] args) {
                 List li = new ArrayList ();
                 li.add("abc1");
                 li.add("abc2");
                 li.add("abc3");
                 li.add("abc4");
                 Show(li);
               
        }

        private static synchronized void Show(List li) {
                 Iterator itr = li.iterator();
                        while(itr.hasNext()){
                                Object obj = itr.next();
                                        if(obj.equals("abc2")){
                                                li.add("abc5");
                                        }
                                        else{
                                        System.out.println("next:"+obj);
                                        }
                        }
                        System.out.println(li);
        }

}

5 个回复

倒序浏览
使用迭代器的时候不要使用集合的增加(add)、删除方法(remove),会出现并发异常,在迭代的时候只能使用迭代器的方法,比如迭代器提供了一个删除的方法remove,像你这个ArayList的集合,可以使用ListIterator迭代器,提供了add的方法,就不会出现异常了!{:3_47:}与君共勉
回复 使用道具 举报 1 0
咸菜+萝卜干 发表于 2014-8-27 08:31
使用迭代器的时候不要使用集合的增加(add)、删除方法(remove),会出现并发异常,在迭代的时候只能使用 ...

这个就不是多线程能处理的吧!翻翻源代码吧!{:3_67:}
回复 使用道具 举报
昨天刚学到这儿,表示还不会。。。
回复 使用道具 举报
咸菜+萝卜干 发表于 2014-8-27 08:31
使用迭代器的时候不要使用集合的增加(add)、删除方法(remove),会出现并发异常,在迭代的时候只能使用 ...

豁然开朗!!
回复 使用道具 举报
集合工具类Collections里有方法可以传不同步集合返回同步的集合,具体自己去查下API,我只能帮你到这了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马