1

我有对象的 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循环iterator没有做任何修改。可以 ?

我错过了什么吗?

4

1 回答 1

5

我认为问题在于这itr是您班级中的一个静态字段,这会造成问题,因为您eventQueue在第二次调用insertTasks().

避免静态字段...编程自己以害怕它们并尽可能避免它们:)。他们邪恶,OO不友好。

于 2012-09-18T09:38:35.163 回答