Frage zu Umgang mit THreads
-
Guten Morgen .
Ich habe folgendes Problem. Ich bin dabei eine KI - für ein TicTacToe Spiel zu programmieren. Nun möchte ich , dass alle möglichen Enzustände in einer Result Queue ( ArrayList) gespeichert werden. Dazu werden alle Zwischenzustände erst einmal berechnet. Das sollen ( bis zu ) 3 Threads erledigen. dabei holen sie sich aus einer Queue immer den ersten Zwischenzustand, berechnen allen weiteren Zustände und packen sie wieder in die Queue oder wenn der Zustand ein Endzustand ist ( Mensch gewinnt, PC gewinnt, unenetschieden) in die Result Queue.
Ich habe bisher das immer so gemacht das eine Schleife immer das erste Elemtent aus der Queue geholt hat , dem Thread das übergegebn hat und ihn anschließend gestartet hat. Allerdings gibt es da ein Problem : Wenn der Thread mit der Abarabeitung fertig ist er beendet. Man kann ihn aber in eine Warteposition schicken und dann neu starten.
Eine 2. Möglichkeit bestht darin alle 3 Threads zu starten und die Threads holen sich immer alleine das erste Element aus der Queue. Allerdings muss man hier auf synchronisation aufpassen, denn nun arbeiten 3 threads an der gleichen Queue ( lesen, löschen, reinschreiben). ICh hhoffe die Erklärung war nicht zu kompliziert.
Ich möchte nur wissen, welche Variante die bessere ist. Oder ob es vielleicht noch eine bessere Lösung gibt.Vielen Dank für eue Unterstützung
-
Nimm doch eine Queue, die thread-safe ist, z.B.:
http://cupi2.uniandes.edu.co/~cupi2/sitio/images/recursos/javadoc/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html
-
Danke aber in erste Linie ging es darum wie das mit den Threads zu häbndeln ist.
-
curry-king schrieb:
Nimm doch eine Queue, die thread-safe ist, z.B.:
http://cupi2.uniandes.edu.co/~cupi2/sitio/images/recursos/javadoc/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.htmlWürde sich nicht auch ein Vator eignen, da er schon synchronisierrt ist
-
Fischkopf2009 schrieb:
curry-king schrieb:
Nimm doch eine Queue, die thread-safe ist, z.B.:
http://cupi2.uniandes.edu.co/~cupi2/sitio/images/recursos/javadoc/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.htmlWürde sich nicht auch ein Vator eignen, da er schon synchronisierrt ist
Ein Vector und nein, dieser sollte nicht mehr verwendet werden. Grund hierfür ist ein Design-Fehler bei der Synchronisation
Du kannst das doch sehr schön über ein Dummy-Objekt synchronisieren.
-
Hab ich nicht schon in einem anderen Thread mit Fischkopf Collections.synchronizedList() empfohlen? Überhaupt kommt mir das alles so doppelt vor hier
MfG SideWinder