在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();
}
答案 0 :(得分:2)
ConcurrentModificationException
未与同步(多线程)问题相关联。
来自javadoc: 当不允许进行此类修改时,检测到并发修改对象的方法可能抛出此异常....请注意,此异常并不总是表明一个对象已被另一个线程同时修改......
例如,如果您迭代Collection
(使用迭代器)并同时更改Collection
(例如添加或删除元素),就会发生这种情况。