今天项目测出一条异常。
大概是这样的,我定义了一个List作为一个共享区域,一个线程负责向List添加,另一个线程负责遍历。
java.util.ConcurrentModificationException异常就是在遍历的时候抛出的。
上网查了原因,是迭代器没有和List的长度同步造成的。也就是说读线程在遍历的时候,写线程改变了List的长度,因而抛出异常。
读线程的错误代码:
ArrayList<String> List = new ArrayList<String>();
for(String str:List ){
//TODO...
}
for语句使用了Iterator这个对象,某一时刻Iterator并不知道List的实际长度,因为写线程不停的改变List长度。
解决
int len = List.size();
for(int i = 0;i < len;i++){
String str = List.get(i);
//TODO...
}
刚接触JAVA,第一次写日志。给自己留一个成长的脚印。
本文探讨了在Java并发编程中遇到的并发修改集合导致的`java.util.ConcurrentModificationException`异常,并提供了解决方案。通过实例展示了如何正确地同步读取和修改集合,避免异常发生。
4万+

被折叠的 条评论
为什么被折叠?



