私は次のコードを持っています:
public static void pauseAllTimers() {
for(Timer timer : Timer.allTimers) {
timer.pause();
}
}
Timer
インスタンスが1つのスレッド内で追加および削除されている場所allTimers
(コードで何かを監視していない限り、私が知る限り)。
コードで同時変更例外が発生するのはなぜですか?
私は次のコードを持っています:
public static void pauseAllTimers() {
for(Timer timer : Timer.allTimers) {
timer.pause();
}
}
Timer
インスタンスが1つのスレッド内で追加および削除されている場所allTimers
(コードで何かを監視していない限り、私が知る限り)。
コードで同時変更例外が発生するのはなぜですか?
コレクションから削除している間、コレクションを反復処理しています-pause()
タイマーが削除されると仮定します。そうしないでください - コレクションを反復処理している間にコレクションを変更しています。これは、スレッドが 1 つしかない場合でも同時変更です。
タイマーのセットをリストにコピーし、それを繰り返します。
List<Timer> timers = new ArrayList<Timer>(Timer.allTimers);
for (Timer timer : timers) {
timer.pause();
}