java - 循环中的 ConcurrentModificationException

标签 java android collections iteration concurrentmodification

我在一个单独的线程(不是 UI 线程)上运行这段代码

strains = new ArrayList<Strain>();
for (Breeder b : breeders) {
   for (Strain s : b.getStrains()) {
        strains.add(s);
    }
}

它有时会导致 ConcurrentModificationException。 我知道我不能在我正在迭代的集合中添加或删除对象,但在这个 fragment 中我没有迭代菌株。我哪里错了?谢谢

最佳答案

Synchronize您的访问权限。这种卡住当前的breeder对象,这样它就不会在任何其他线程中被修改。尝试这样做的方法将被阻止。阻塞意味着它们只是等待(如 System.sleep(x)),直到另一个线程中的 synchronized block 已被处理。

synchronized(breeders) {
    for (Breeder b : breeders) {
       for (Strain s : b.getStrains()) {
            strains.add(s);
        }
    }
}

确保您还为其他线程访问 breeders 设置了 synchronized

关于java - 循环中的 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324310/

相关文章:

java - Callable 接口(interface)是一个线程吗?它工作时我无法运行任何东西

java - 如何修复spring-boot中的 'java.sql.SQLException: ORA-01017: invalid username/password; logon denied'错误

android - block 时间 TimePicker

java.lang.NumberFormatException : Invalid int: “” 异常

android - 如何测试 Facebook 用户是否使用 sdk 3 安装了我的 android 应用程序

java - 在 HashSet 中检索数据

java - 永久删除 JAVA_TOOL_OPTIONS 环境变量

java - 为什么我的代码没有打印出 txt 文件的所有行?

scala - 在 Scala 中从迭代器创建 SortedMap

c# - 我应该使用什么作为方法 IEnumerable、IList、Collection 或什么的返回类型