日期:2014-05-19  浏览次数:20694 次

关于静态的ArrayList的异常,求解决
public class manyThread {
private static List<String> i= Collections.synchronizedList(new ArrayList<String>());

public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根
List<String> i=manyThread.i;
i.add("3");
List<String> o=manyThread.i;
for(String r:o){
i.remove(0);
}
}

}
这段代码执行会报出这样的异常:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at _Test.manyThread.main(manyThread.java:15)
不明白什么原因啊
------最佳解决方案--------------------
你可以把你修改后的数据放到一个新的List里去,现在这个释放掉

------其他解决方案--------------------
在对ArrayList进行遍历时,不能对其进行修改!
------其他解决方案--------------------
用foreach,for迭代的集合元素是不能被删除
ConcurrentModificationException指的就是不允许这样的操作
解决方案:
楼上的已经说了 JVM认为用原生的iterator删除是安全的
楼主还可以试下 foreach迭代的元素是只读的
------其他解决方案--------------------
我现在要写的部分需要遍历集合,并判断是否移除该项,有没有其它解决的方法呢
------其他解决方案--------------------
静态的 好像不能去除
------其他解决方案--------------------
引用:
静态的 好像不能去除

?,static跟能不能移除没关系!


List<String> j=manyThread.i;
j.add("3");
Iterator<String> i=manyThread.i;
while(i.hasNext()){
String key = i.next();
   if("3".equals(key)){
       i.remove();
   }
}


------其他解决方案--------------------
哎,没办法的话只能重新弄一个集合去弄了,谢谢