【发布时间】:2012-09-18 09:35:06
【问题描述】:
我有对象的 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);
Task 对象中的getArrivalTime 看起来像:
public float getArrivalTime() { return arrivalTime; }
我的问题是,我在哪里做这个修改?我运行这个iterator 的while 循环没有做任何修改。是吗?
我错过了什么吗?
【问题讨论】:
-
您是否从多个线程访问它?您能否在迭代时在代码的其他地方的另一个线程中修改它?
-
没有。我只有一个
main线程。 -
您能否提供一个能够重现该问题的独立示例?您可能正在更改未提供的代码中的集合。
-
顺便说一句,我会使用
double而不是float,除非你有充分的理由这样做。
标签: java iterator linked-list