Java设置“ConcurrentModificationException”

时间:2015-06-17 13:14:45

标签: java exception concurrency

在oldSet.removeAll(已删除);引发此异常

  

ConcurrentModificationException的

我添加“synchronized”关键字但没有变化!!

Set<Employees> deleted;

Set<Employees> oldSet = new TreeSet<Employees>(new EmployeeComparator());
oldSet.addAll(employeesListDB);

Set<Employees> newSet = new TreeSet<Employees>(new EmployeeComparator());
newSet.addAll(employeesList);      

 try{      

     deleted = Sets.difference(oldSet, newSet);

    Set<Employees> added = Sets.difference(newSet, oldSet);

    ***oldSet.removeAll(deleted);***
    oldSet.addAll(added);        

}catch(Exception ex){
    System.out.println(ex.getMessage());
}

我也尝试了迭代器但是出现了同样的异常:

Iterator it = oldSet.iterator();
            Employees e;
            while(it.hasNext())
            {
                e= (Employees)it.next();
                if(oldSet.contains(e))
                    oldSet.iterator().remove();
            }

1 个答案:

答案 0 :(得分:2)

ConcurrentModificationException未与同步(多线程)问题相关联。

来自javadoc: 当不允许进行此类修改时,检测到并发修改对象的方法可能抛出此异常....请注意,此异常并不总是表明一个对象已被另一个线程同时修改......

例如,如果您迭代Collection(使用迭代器)并同时更改Collection(例如添加或删除元素),就会发生这种情况。