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)
不明白什么原因啊

解决方案 »

  1.   

    在对ArrayList进行遍历时,不能对其进行修改!
      

  2.   

    ?,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();
       }
    }
      

  3.   

    你可以把你修改后的数据放到一个新的List里去,现在这个释放掉
      

  4.   

    用foreach,for迭代的集合元素是不能被删除
    ConcurrentModificationException指的就是不允许这样的操作
    解决方案:
    楼上的已经说了 JVM认为用原生的iterator删除是安全的
    楼主还可以试下 foreach迭代的元素是只读的