我有以下代码:
public static void pauseAllTimers() {
for(Timer timer : Timer.allTimers) {
timer.pause();
}
}
在一个帖子中将Timer
个实例添加到allTimers
的位置(据我所知,除非我在我的代码中监督某些内容)。
为什么我的代码会产生并发修改异常?
答案 0 :(得分:3)
当您从中移除时,您正在迭代 - 假设pause()
删除了计时器。不要这样做 - 你正在迭代它时修改一个集合,这是一个并发修改,即使只有一个线程。
将计时器集复制到列表中,然后遍历 :
List<Timer> timers = new ArrayList<Timer>(Timer.allTimers);
for (Timer timer : timers) {
timer.pause();
}