黑马程序员技术交流社区
标题:
集合迭代并发访问异常
[打印本页]
作者:
jk7130866
时间:
2015-7-27 22:27
标题:
集合迭代并发访问异常
public static void main(String[] args) {
//创建一个集合容器,使用Collection接口方法。
ArrayList al=new ArrayList();
//添加元素
al.add("abxd1");
al.add("abxd2");
al.add("abxd3");
//在迭代过程中,添加或删除元素
for( Iterator it=al.iterator();it.hasNext();){
Object obj=it.next();
if(obj.equals("abxd1")){
al.add("asdasd");//并发访问
}
}
}结果:引发了java.util.ConcurrentModificationException。
当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。这是什么意思呢,当集合添加元素的时候,集合获得了元素的引用,那么集合就可以对元素进行操作,当执行到Iterator it=al.iterator()这条语句的时候,元素的引用就被取到了迭代器里面。现在操作元素的方法就有两种了,要么用集合的方法要么用迭代器的方法。这两种方法操纵的是同一组元素。当使用迭代器的方法操作元素时,同时用集合的方法操作用一组元素,就有可能引起安全隐患。
作者:
jk7130866
时间:
2015-7-27 22:29
迭代过程中只能使用迭代的方法操作数据
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2