黑马程序员技术交流社区
标题:
迭代器 并发异常 用多线程处理代码怎么写?
[打印本页]
作者:
SmallRooker
时间:
2014-8-27 06:04
标题:
迭代器 并发异常 用多线程处理代码怎么写?
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);
}
}
作者:
咸菜+萝卜干
时间:
2014-8-27 08:31
使用迭代器的时候不要使用集合的增加(add)、删除方法(remove),会出现并发异常,在迭代的时候只能使用迭代器的方法,比如迭代器提供了一个删除的方法remove,像你这个ArayList的集合,可以使用ListIterator迭代器,提供了add的方法,就不会出现异常了!{:3_47:}与君共勉
作者:
咸菜+萝卜干
时间:
2014-8-27 08:32
咸菜+萝卜干 发表于 2014-8-27 08:31
使用迭代器的时候不要使用集合的增加(add)、删除方法(remove),会出现并发异常,在迭代的时候只能使用 ...
这个就不是多线程能处理的吧!翻翻源代码吧!{:3_67:}
作者:
myzhang
时间:
2014-8-27 08:33
昨天刚学到这儿,表示还不会。。。
作者:
myzhang
时间:
2014-8-27 08:34
咸菜+萝卜干 发表于 2014-8-27 08:31
使用迭代器的时候不要使用集合的增加(add)、删除方法(remove),会出现并发异常,在迭代的时候只能使用 ...
豁然开朗!!
作者:
回忆~坚
时间:
2014-8-27 09:06
集合工具类Collections里有方法可以传不同步集合返回同步的集合,具体自己去查下API,我只能帮你到这了~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2