java.util.ConcurrentModificationException异常 解决方法

原文:http://blog.sina.com.cn/s/blog_48dc562301000d2b.html

今天写一个程序的时候遇到了java.util.ConcurrentModificationException异常,半天不知道是什么问题,这里举个简单的例子重现一下异常是如何出现的:

import java.util.ArrayList;
import java.util.Iterator;

class User {
    private String userName, password;
    private int ID;

    User(int p_ID, String p_userName, String p_password) {
        ID = p_ID;
        userName = p_userName;
        password = p_password;
     }
}

public class Test {
    static ArrayList al = new ArrayList();

    public static void main(String[] args) {
        add();
        clear();
     }

    public static void add() {
        for (int i = 0; i < 5; i++) {
            al.add(new User(i, "userName", "password"));
         }
     }

    public static void clear() {
        Iterator it = ((ArrayList) al).iterator();
        while (it.hasNext()) {
            User usr = (User) (it.next());
            int index = al.indexOf(usr);
            al.remove(index);
            // it.remove();
        }
        System.out.println("Cleard");
     }
}

注意到上面代码中注释部分的上面2句,那就是异常出现的根源,我从ArrayList的一个对象al中移去了项目,然而Iterator对象it并不知道al中已经发生了变化,所以再继续遍历的时候会发生错误。正确的写法应该如注释行所示,然后注释行去掉上面的2行。

时间: 2024-09-30 12:33:03

java.util.ConcurrentModificationException异常 解决方法的相关文章

java.util.ConcurrentModificationException 解决方法_OpenStack

 java.util.ConcurrentModificationException 解决方法 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除. 则使用会报以下异常: Java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$Key

解决java.util.ConcurrentModificationException错误办法

这个异常一般在我们遍历删除集合元素时出现.写了下面这个代码来展示这个异常. [java] import java.util.ArrayList; import java.util.List; public class ExeptionTest { public static void main(String[] args) { List list = new ArrayList(); list.add("a"); list.add("b"); list.add(&q

出现 java.util.ConcurrentModificationException 时的解决办法

原文:http://www.cnblogs.com/error404/archive/2011/11/25/2263671.html for (int i=0; i<list.size(); i++) { // 只有在这种方式遍历集合时,同时对集合增加.删除才不会影响. // list.remove(list.get(i));   } 在对一个map进行迭代遍历并删除一些符合条件的键值对的时候,容易出现  java.util.ConcurrentModificationException 这个异

多线程 java.util.ConcurrentModificationException 问题

问题描述 目标:定义一个Producer类创建Student并添加到studnts集合中,再定义一个Consumer类从studnts集合中取出数据并打印控制台.Producer,Consumer类都实现了Runnable接口.在MainTest类的main方法中创建线程并启动,如下所示:        Producer p = new Producer();        Thread tp1 = new Thread(p);        tp1.start();              

win7系统应用程序发生异常解决方法

  win7系统应用程序发生异常解决方法.不少小伙伴在使用win7的过程中发现安装软件或者使用程序的时候会发生应用程序发生异常 unknown software exception(0x80000004)的问题,那么要如何解决呢?下面就让小编为大家做个解答. 应用程序发生异常 应用程序发生异常 unknown software exception(0x80000004)的原因:一般是程序出现不可避免的内存地址错误. 解决方法1:通过系统还原到不出现这个错误时的节点进行还原系统. 解决方法2:你最

SVN Attempted to lock an already-locked dir异常解决方法

Attempted to lock an already-locked dir异常解决方法 eclipse或myeclipse用svn提交的时候报错: Attempted to lock an already-locked dir svn: Working copy 'D:/Program Files/MyEclipse 6.6flex/workspace/emis/WebRoot/emis/emresource' locked org.tigris.subversion.javahl.Clie

java.util.ArrayDeque类使用方法详解_java

本文为大家介绍了java.util.ArrayDeque类使用方法,供大家参考,具体内容如下 1. ArrayDeque有两个类属性,head和tail,两个指针. 2. ArrayDeque通过一个数组作为载体,其中的数组元素在add等方法执行时不移动,发生变化的只是head和tail指针,而且指针是循环变化,数组容量不限制. 3. offer方法和add方法都是通过其中的addLast方法实现,每添加一个元素,就把元素加到数组的尾部,此时,head指针没有变化,而tail指针加一,因为指针是

连接池和 Timeout expired异常解决方法

连接池和 timeout expired异常解决方法 你需要保证你每次调用连接的同时都在使用过后通过close()或dispose()对其执行了关闭.最简单的办法就是使用using,将你的连接泄漏方法修改成如下面的代码样式: public void doesnotleakconnections()     {            using (sqlconnection sqlconnection1 = new sqlconnection("server=.sqlexpress ;integr

Win7系统打开网页提示应用程序已被JAVA安全阻止的解决方法

具体方法如下: 1.完成JAVA版本更新,然后刷新有问题的网页页面,以排除JAVA版本问题引起JAVA安全阻止: 2.从开始菜单中打开控制面板,我们需要进入控制面板来修改相应的配置: 3.进入控制面板后,在控制面板中找到JAVA选项,如果找不到可将查看方式切换到大图标或图标即可; 4.在JAVA控制面板中打开安全选项,并找到例外站点列表; 5.打开JAVA控制面板中编辑例外站点列表,将我们需要在网页上运行JAVA脚本的站点添加到此列表中; 6.将需要运行JAVA脚本的站点添加至其中,并对弹出的安