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)
不明白什么原因啊
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<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();
}
}
ConcurrentModificationException指的就是不允许这样的操作
解决方案:
楼上的已经说了 JVM认为用原生的iterator删除是安全的
楼主还可以试下 foreach迭代的元素是只读的