0

私は次のコードを持っています:

public static void pauseAllTimers() {
        for(Timer timer : Timer.allTimers) {
            timer.pause();

        }

    }

Timerインスタンスが1つのスレッド内で追加および削除されている場所allTimers(コードで何かを監視していない限り、私が知る限り)。

コードで同時変更例外が発生するのはなぜですか?

4

1 に答える 1

3

コレクションから削除している間、コレクションを反復処理しています-pause()タイマーが削除されると仮定します。そうしないでください - コレクションを反復処理している間にコレクションを変更しています。これは、スレッドが 1 つしかない場合でも同時変更です。

タイマーのセットをリストにコピーし、それを繰り返します。

List<Timer> timers = new ArrayList<Timer>(Timer.allTimers);
for (Timer timer : timers) {
    timer.pause();
}
于 2013-04-09T18:49:23.987 に答える