Normal
Wenn man innerhalb eines Threads Collections bearbeitet bzw. drüber iteriert, sollte man stets bei jedem Durchlauf eine Kopie erstellen und nicht mit dem Original arbeiten. Während man kopiert muss ein Monitor auf das Original gesetzt werden, damit dort weder Elemente entfernt noch hinzugefügt werden können. Danach kann der Thread gemütlich über die Kopie iterieren, während das Original an anderen Stellen wieder modifiziert werden darf. Wenn ein GameObjekt das Zeitliche gesegnet hat, muss es entsprechend markiert werden, damit andere Threads es schnell überspringen können, wenn es noch einen Platz in deren Kopie ergattert hat. Ich würde aber Luk10s Methode dahingehend abändern, dass der Thread die Elemente nicht entfernt, weil bei dieser Methode wäre das eh' überflüssig.[code=Java]for(GameObject go : objectsCopy) { if(!go.isDead()) { go.doWork(); }}[/code]
Wenn man innerhalb eines Threads Collections bearbeitet bzw. drüber iteriert, sollte man stets bei jedem Durchlauf eine Kopie erstellen und nicht mit dem Original arbeiten. Während man kopiert muss ein Monitor auf das Original gesetzt werden, damit dort weder Elemente entfernt noch hinzugefügt werden können. Danach kann der Thread gemütlich über die Kopie iterieren, während das Original an anderen Stellen wieder modifiziert werden darf. Wenn ein GameObjekt das Zeitliche gesegnet hat, muss es entsprechend markiert werden, damit andere Threads es schnell überspringen können, wenn es noch einen Platz in deren Kopie ergattert hat. Ich würde aber Luk10s Methode dahingehend abändern, dass der Thread die Elemente nicht entfernt, weil bei dieser Methode wäre das eh' überflüssig.
[code=Java]for(GameObject go : objectsCopy) {
if(!go.isDead()) {
go.doWork();
}
}[/code]