我有一个LinkedList对象列表.
List<LinkedList<File1>> backup = new ArrayList<LinkedList<File1>>();
Run Code Online (Sandbox Code Playgroud)
LinkedList包含一些元素.我需要通过单击按钮动态添加其他元素.在这样做时,我遇到了并发修改错误.我真的不明白为什么会出现这个错误.这是代码:
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt)
{
// When JOIN button is clicked
int parent_node,dist_node;
// List<File1> temp_list = new ArrayList<File1>();
File1 f_new = new File1();
parent_node = Integer.parseInt(jTextField4.getText());
dist_node = Integer.parseInt(jTextField5.getText());
LinkedList<File1> tmp_bk = backup.get(parent_node);
System.out.println("parent node : " + parent_node);
System.out.println("dist node : " + dist_node);
System.out.println("no of lists : " + backup.size());
f_new.nod = backup.size();
f_new.dist = dist_node;
// temp_list.add(f_new);
tmp_bk.add(f_new);
ListIterator itr = it_bk.get(parent_node);
while(itr.hasNext())
{
File1 f = (File1)itr.next();
System.out.println("NODE : " + f.nod + "DIST : " + f.dist);
}
}
Run Code Online (Sandbox Code Playgroud)
这可能是因为您正在编辑列表,然后尝试使用原始迭代器.集合API 不允许这样做.编辑列表后需要创建新的迭代器.
例如,一个线程通常不允许修改Collection而另一个线程正在迭代它.通常,在这些情况下,迭代的结果是不确定的.如果检测到此行为,某些Iterator实现(包括JRE提供的所有通用集合实现的实现)可能会选择抛出此异常.执行此操作的迭代器称为失败快速迭代器,因为它们快速而干净地失败,而不是在未来的未确定时间冒着任意的,非确定性行为的风险.
请注意,此异常并不总是表示某个对象已被另一个线程同时修改.如果单个线程发出违反对象合同的一系列方法调用,则该对象可能会抛出此异常.例如,如果线程在使用失败快速迭代器迭代集合时直接修改集合,则迭代器将抛出此异常.