我有对象的LinkedList和迭代器。我知道当您尝试在运行迭代器时修改列表时会抛出此ConcurrentModificationException。但在我的情况下,我不明白这个修改的位置。
迭代器看起来像这样:
private static void insertTasks(Task t) {
if(eventQueue.size() == 0) {
eventQueue.addFirst(tsk);
return;
}
int pos = 0;
while (itr.hasNext()){
//The line below throws the exception
if (t.getArrivalTime() <= itr.next().getArrivalTime() )
{
break;
}
pos++;
}
}
我从另一种方法调用此insertTasks
方法,如下所示:
tsk = null;
tsk = new Task(1,"P1",1,4.0f,1.5f,0.0f,8.0f);
insertTasks(tsk);
tsk = null;
tsk = new Task(0,"P0",2,5.0f,2.5f,1.0f,10.0f);
insertTasks(tsk);
getArrivalTime
对象中的Task
如下所示:
public float getArrivalTime() { return arrivalTime; }
我的问题是,我在哪里修改?运行此while
的{{1}}循环没有进行任何修改。是吗?
我错过了什么吗?
答案 0 :(得分:5)
我认为问题在于itr
是您班级中的静态字段,并且正在创建问题,因为您在第二次调用eventQueue
时向insertTasks()
添加了一个元素
避免使用静态字段...让自己编程以恐惧它们并尽可能地避免它们:)。他们邪恶,OO不友好。