Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

05.04.2011, 15:49

Multi-Threading Probleme in Java

Hi,
ich versuche gerade mein Android Spiel multi-threading fähig zu machen. Ein Thread zu rendern, einer für die Spiele-Logik.
Das Programm stürtzt konsequent ab, sobald ich während des Renderns neue Geometry Objekte einfüge (LinkedList.add).
Ich habe schon einiges probiert mit "synchronized" zu lösen und unterschiedliche Arten von Schleifen, die Objekte zu durchlaufen.
Mit einer Java for-each Schleife, einer while Schleife. Aber es stürtzt immer wieder ab.
Worauf muss man bei multi-threading programmierung in Java besonders achten? Auf der Android API Docu steht, dass so Sachen wie "LinkedLists" usw. nicht thread-safe sind.
Was wohl so viel heißt, dass man sich da um die Threadsicherheit selber kümmern muss. Was ich für Java ziehmlich enttäuschend finde.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

05.04.2011, 16:12

Worauf muss man bei multi-threading programmierung in Java besonders achten?

Kurz: Auf das gleiche, wie bei anderen Sprachen auch. ;)

Du könntest es mal mit den synchronisierten Containern versuchen:
http://download.oracle.com/javase/1.5.0/…ge-summary.html

Dass die normalen Collections nicht MT safe sind halte ich für sinnvoll, da nicht jeder den Overhead bezahlen möchte, was ein solches System kostet. Wenn man es braucht, dann kann man ja die geeigneten Collections benutzen.

Multithreading Sicherheit im nachhinein in ein Projekt bringen ist eher ungünstig, da man einige Voraussetzungen, auf die man sich mal verlassen hat nicht mehr verlassen kann, was dann unter Umständen das ganze Projekt betreffen kann. Ist bei Java weniger hart, wie z.B bei C, aber auch da präsent. Auf jeden Fall ist eine Eingrenzung keine schlechte Idee.

Konkret bei deinem Problem sollte es mit einer synchronisierten Liste schon funktionieren. Producer/Consumer ist eigentlich mittlerweilen relativ gut möglich.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

08.04.2011, 11:37

Es gibt in Java auch threadsichere Container, kann mir aber gerade nicht die genauen Klassennamen in Erinnerung rufen und schnelles Googlen hat leider auch nichts geholfen. Ansonsten poste mal deinen Code, ich hab einige Erfahrung mit Multithreading in Java und auch andere hier können sicher auf Basis des Codes helfen.

Gruß

PS: Was heißt egtl. Abstürzen? Gibts dazu auch ne genaue Exception, bzw. kriegst du nen Deadlock?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

08.04.2011, 17:39

Es gibt in Java auch threadsichere Container, kann mir aber gerade nicht die genauen Klassennamen in Erinnerung rufen und schnelles Googlen hat leider auch nichts geholfen.

Vielleicht hätte es geholfen den vorherigen Post zu lesen. ;)

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

5

11.04.2011, 17:39

Ich hab doch keine Zeit! :P

Werbeanzeige