【发布时间】:2020-03-14 23:02:40
【问题描述】:
我有两个正在运行的线程,我需要控制子弹是否接触到敌人,但这给了我打印“s4”的问题。知道那里发生了什么吗?我是个初学者。我正在使用 Java。
ArrayList<Nemico> nemici= o_orda.getNemici();
for (Nemico nemico : nemici) {
if(Collisioni.ControllaCollisioni(o_navicella, nemico)){
nemici.remove(nemico);
this.o_navicella.vita-=10;
break;
}
for (Proiettile pro : proiettili){
System.out.println("s1");
if(Collisioni.CollsioniProiettile(pro, nemico)){
System.out.println("s2");
nemici.remove(nemico);
System.out.println("s3");
proiettili.remove(pro);
System.out.println("s4");
break;
}
System.out.println("s5");
}
if(ControllaSconfitta()){
this.giocON=false;
Disegna();
}
}
这是代码,我相信它会对您有所帮助。 此代码位于一个函数中,该函数每 n 毫秒检查和更新一次所有内容。
感谢您的帮助
Exception in thread "Thread-7" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at java.lang.Thread.run(Thread.java:745)
当碰撞发生时它会冻结游戏。
【问题讨论】:
-
检查ConcurrentModificationException和ArrayList的fail-fast部分(迭代器,用于for-each循环)
-
您可能应该使用带有真正迭代器的循环。然后,您可以使用迭代器在 ArrayList 中添加或删除。
-
使用 getListIterator() 以获得最佳结果。
-
好的,你能举例说明我的代码应该如何使用迭代器吗?谢谢
标签: java multithreading arraylist