imb*_*ope 2 java concurrentmodification
当我注意到我在打电话时随机获得Exception时,我正在为我的决赛制作一个游戏 repaint();
这一切的原因是不同的对象在不同的时间更新,并有自己Thread更新自己.有时,实体会在绘制时自行更新.绘制线程以大约60-100 FPS运行,而实体大约每300毫秒更新一次.
游戏没有停止或有任何其他与此相关的问题.
我知道忽略它是一个坏主意,但还有什么我可以做的吗?拥有多个线程是我能想到的让游戏运行的唯一解决方案.
谢谢阅读!
编辑:当我在绘画时尝试删除实体时,问题似乎发生了; 两者都使用相同的List.
ConcurrentModificationException与多线程无关(尽管可能涉及多个线程).当您在List通过除Iterator.remove()方法之外的方式添加或从集合中移除项目的同时迭代集合(例如a )时,会发生这种情况.
这可能发生在不同的线程上,但它可能是相同的线程.例如,这段代码也会抛出一个ConcurrentModificationException:
Iterator iter = someList.iterator();
while(iter.hasNext()) {
Object item = iter.next();
someList.remove(item);
}
Run Code Online (Sandbox Code Playgroud)
如果相反iter.remove()已被调用,则不会发生错误.
避免这种情况的方法:
remove()迭代器的方法CopyOnWriteArrayList避免此错误的内容,代价是在每次更改时创建内部数组的副本.