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の2回目の呼び出しで要素を追加しているため、問題が発生していることだと思いますinsertTasks()

静的フィールドを避けてください...それらを恐れるように自分でプログラムし、できるだけ避けてください:)。彼らは邪悪で、OOは無愛想です。

于 2012-09-18T09:38:35.163 に答える