Java 列表ConcurrentModificationException
我有以下代码Java 列表ConcurrentModificationException,java,java.util.concurrent,concurrentmodification,Java,Java.util.concurrent,Concurrentmodification,我有以下代码 public void saveProjects(List<Project> proj) throws DatabaseException { for (Project listItems: proj) { // error here insertProjects(listItems); } } private void insertProjects(Project prj) throws DatabaseException {
public void saveProjects(List<Project> proj) throws DatabaseException {
for (Project listItems: proj) { // error here
insertProjects(listItems);
}
}
private void insertProjects(Project prj) throws DatabaseException {
commitObjects(prj);
}
源代码
for (Project persist: projectList) {
persist.setProjectId("K7890");
persist.setName(fileName);
myDAO.saveProjects(projectList);
}
projectList.clear(); // <-- clear might cause to this Exception
它通过迭代器It
删除当前对象,迭代器具有对基础集合列表的引用
避免:
list.remove(myObject);
看起来很奇怪,我猜是您在另一个线程中修改列表(list proj
),同时对其进行迭代
因为在你给我们的代码中,你没有以任何方式改变列表
您可以尝试调用带有proj
列表副本的saveProjects
方法。不确定投票失败的原因。这是一个合法而完整的问题。我收回这句话。打字错误分散了注意力,误导了人。@hovercraftofeels谢谢committeobjects(prj)
do?它是否以某种方式修改了列表项目
?@hovercraftfullofels我已经包含了commitObjects方法代码段。这充其量只是一个注释(正如您已经做的那样),而不是一个答案。Maxim,如果我从第二个中删除for循环,它将停止保存记录。如果您提交插入项目(列表项)代码>仍然会出现此错误?您的意思是直接调用插入项目(listItems)代码>?切换注释,如//插入项目(列表项);也许连接会起作用。当我评论插入项目(列表项)时,我不熟悉数据访问逻辑代码>则没有例外。
it.remove();
list.remove(myObject);