Java LinkedList的ConcurrentModificationException

时间:2012-09-18 09:35:07

标签: java iterator linked-list

我有对象的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}}循环没有进行任何修改。是吗?

我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

我认为问题在于itr是您班级中的静态字段,并且正在创建问题,因为您在第二次调用eventQueue时向insertTasks()添加了一个元素

避免使用静态字段...让自己编程以恐惧它们并尽可能地避免它们:)。他们邪恶,OO不友好。