java - 有时会收到 java.util.ConcurrentModificationException,有时则不会。不明白为什么

标签 java crash render

首先是错误消息:

线程“Thread-2”中出现异常
java.util.ConcurrentModificationException
在 java.util.ArrayList$Itr.checkForCommodification(来源未知)
在 java.util.ArrayList$Itr.next(来源未知)
在 zom.mainpac.Game.render(Game.java:218)
在zom.mainpac.Game.run(Game.java:154)
在 java.lang.Thread.run(来源未知)

在第 218 行渲染我的对象 ArrayList:

    for(Objects e : list){
    e.render(g);
    }

然后是第 154 行的渲染函数:

    render();

...

private void render() {

    BufferStrategy bufferStrategy = this.getBufferStrategy();

    if (bufferStrategy == null) {

        this.createBufferStrategy(2);
        return;

    }

问题可能是因为我的笔记本电脑有时无法渲染所有对象,因此它放弃了。所以我只是想知道是否有更好的方法可以做到这一点而不会一直崩溃。

最佳答案

您遇到线程安全问题和/或列表访问问题。您可能希望将列表/数组项复制到局部变量中,以便在遍历和/或考虑同步块(synchronized block)时无法修改列表。

您的实例列表变量正在被一个线程访问(执行 for 循环),然后另一个线程出现,也许它想要访问它。要解决问题,而不是使用实例变量执行 for 循环,请创建一个局部变量并从 .list 复制项目。现在您有一个其他线程无法访问的私有(private)列表

关于java - 有时会收到 java.util.ConcurrentModificationException,有时则不会。不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178464/

相关文章:

java - 为什么 LibGDX 没有将更新和渲染分开?

javascript - 在 Java 中使用 Jsoup 检测 Javascript 库

java - 从二进制文件中读取字符串不会返回任何内容

java - 使用 ArrayList 存储变量

debugging - UWP 无法调试 .NET 编译代码(发布版)

javascript - React 服务器端渲染中状态如何工作?

java - 没有任何构造函数的 JVM 字节码类是否有效?

c++ - 内存泄漏和 delete[] 崩溃

javascript - 简单的 JavaScript 代码使 Firefox 崩溃

javascript - React Native 中的 async 关键字和 render() 是什么?它实际上做了什么