代码生成并发修改例外

时间:2013-04-09 18:47:26

标签: java android concurrency

我有以下代码:

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

        }

    }

在一个帖子中将Timer个实例添加到allTimers的位置(据我所知,除非我在我的代码中监督某些内容)。

为什么我的代码会产生并发修改异常?

1 个答案:

答案 0 :(得分:3)

当您从中移除时,您正在迭代 - 假设pause()删除了计时器。不要这样做 - 你正在迭代它时修改一个集合,这是一个并发修改,即使只有一个线程。

将计时器集复制到列表中,然后遍历

List<Timer> timers = new ArrayList<Timer>(Timer.allTimers);
for (Timer timer : timers) {
    timer.pause();
}