0

我有以下代码:

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

        }

    }

在一个线程Timer中添加和删除实例的位置allTimers(据我所知,除非我正在监督我的代码中的某些内容)。

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

4

1 回答 1

3

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

将一组计时器复制到一个列表中,然后对其进行迭代

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