错误日志:
[26-12-13 3:16]:java.util.ConcurrentModificationException
[26-12-13 3:16]:at java.util.ArrayList中的$ Itr.checkForComodification(ArrayList.java:819)
[26-12-13 3:16]:at java.util.ArrayList $ Itr.next(ArrayList.java:791)
[26-12-13 3:16]: 在 server.event.cycle.CycleEventHandler.stopEvents(CycleEventHandler.java:60) [26-12-13 3:16]:at server.model.players.Client.logout(Client.java:292)
方法:
public void stopEvents(Object owner) {
for (CycleEventContainer c : events) {
if(c.getOwner() == owner) {
c.stop();
}
}
}
问题: 如何解决此错误?
编辑;停止方法:
public void stop() {
isRunning = false;
event.stop();
}
这会有用吗?
public void stopEvents(Object owner) {
ArrayList<CycleEventContainer> garbageEvents = new ArrayList<>();
for (CycleEventContainer c : events) {
if(c.getOwner() == owner) {
garbageEvents.add(c);
}
}
for (CycleEventContainer c: garbageEvents) {
c.stop();
}
garbageEvents.clear();
}
答案 0 :(得分:0)
每次Collection在迭代时添加或删除任何元素时,都会抛出ConcurrentModificationException。这是为了让迭代Collection的线程知道修改。 因此,我相信您的代码会在其他线程中的其他位置修改事件,因为此处列出的代码似乎不会添加或删除任何元素。你可以看看这个。希望它有所帮助。
答案 1 :(得分:0)
在这种情况下,ConcurrentModificationException意味着另一个线程正在尝试修改events
。您需要使用同步或线程安全集合而不是ArrayList。