gpt4 book ai didi

ArrayLists 的 Java 并发性(线程)。经典for和foreach的区别

转载 作者:行者123 更新时间:2023-11-29 03:26:02 25 4
gpt4 key购买 nike

<分区>

我有一个关于我的 GalaxyInvaders 克隆的问题。

forforeach 遍历 ArrayList 有什么区别?

我正在使用 foreach 循环修改 ArrayLists(更改变量/删除一些对象)(我在使用 Semaphores).

问题是,当我使用 foreach 语句时,应用程序抛出异常。

Exception in thread "Thread-39" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at pl.mosek.MyPanel2$ColissionDetector.run(GUI.java:421)
at java.lang.Thread.run(Unknown Source)

当我使用经典的 for 语句时,问题神奇地消失了。谁能解释一下这是为什么?

代码:

@Override
public void run() {

while (true) {
if (ship.getBullets().isEmpty() == false
&& monsters.isEmpty() == false) {

semaphoreLock(semaphoreBullet);

for (Bullet i : ship.getBullets()) {
if (i.isDestroyed() != true) {

semaphoreLock(semaphoreMonster);

for (Enemy j : monsters) {
if (i.getBounds()
.intersects(j.getBounds())
&&j.isDestroyed() != true) {
i.setDestroyed(true);
i.setVisible(false);

j.setDestroyed(true);
j.setVisible(false);
}
}
}
semaphoreRelease(semaphoreMonster);
}
semaphoreRelease(semaphoreBullet);

}
try {
Thread.sleep(25);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

如果我将 foreach 切换为 for 语句,一切正常。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com