package synchronizedList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ConcurrentModificationException {
public static void main(String[] args) {
List<Long> list = Collections.synchronizedList(new ArrayList<Long>());
for(int i=0;i<1000;i++){
list.add((long) i);
}
Thread t = new Thread(new Delete(list));
t.start();
for (Long w : list) {
System.out.println(w);
}
}
}
class Delete implements Runnable{
private List<Long> list;
public Delete(List<Long> list) {
this.list = list;
}
@Override
public void run() {
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
}
}
这是我自己构造的代码,拿到你的eclipse里面运行下,就会抛出java.util.ConcurrentModificationException 异常.
原因很简单, 2个线程都没有独占锁,主线程在读,子线程在修改,所以抛异常了