java - 代码产生并发修改异常

标签 java android concurrency

我有以下代码:

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

        }

    }

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

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

最佳答案

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

将计时器集复制到列表中,然后迭代:

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

关于java - 代码产生并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15910098/

相关文章:

Android Gradle : What is javaMaxHeapSize "4g"?

java - Android 内的 TabActivity 和导航

algorithm - 强连通分量 (SCC) 的并发算法

c++ - 如何使用 condition_variable 正确中止线程?

java - 如何将 sleep 添加到我的 Retry TestNG 方法中?

java - 如何更改java中选项卡标签的宽度但保留 "selection"选项

java - JFrame 在关闭时拦截退出以保存数据

java - Java 中 OutputStreamWriter 中的字符串对象与字符串文字

android - Android 中的自定义相机滤镜

.net - 哈希表并发