黑马程序员技术交流社区

标题: 集合迭代并发访问异常 [打印本页]

作者: 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