Problem mit Threads



  • Hallo .
    Ich habe eine Klasse, die ein Spielfeld enthält. Eine weitere Klasse ( ComputerPlayer) soll nun einen Spielzug berechen. Dazu nutzt diese Klasse eine weitere Klasse ExpandField. ComputerPlayer startet nun mehere Threads von der Klasse ExpandField um alle möglichkeiten (Spielzüge) zu berehcnen. So nun meine Frage da, die Threads ja unäbhängig von der Instanz ComputerPlayer laufen, muss ich irgendwie auf das Ende der Berechnung warten. Also konkret , wie kann ich auf das Fertigstellen mehrerer Threads warten ? Danke für eure Hilfe



  • Ich habe von Java keinen Plan, aber in WinAPI/MFC könnte man das z.B. per WaitForMultipleObjects machen. Vielleicht findest du dafür ein Java-Äquivalent.



  • Vielen Dank für deine Antwort. Ja unter C++ kenne ich das auch.





  • Ich habe mir überlegt zu zählen viele Threads ich starte, danach veringert jeder thread wenn er fertig ist diese anzahl. und nun warte ich bis die zahl wieder null ist. bringt das nicht den geleichen effekt . Hat jemand eine andere idee



  • Ich habs jetzt nicht ausprobiert und lies dir vorher noch die API dazu durch, aber hast du schon mal void join() angeschaut?



  • An join habe ich auch schon gedacht. Aber wenn ich 10 Threads starte und immer auf das ende eines threads warte bis ich einen anderen starte , bringt mir der thread ndoch nichts, dann kann ich es ja auch hintereinander berechnen.



  • Fischkopf2009 schrieb:

    An join habe ich auch schon gedacht. Aber wenn ich 10 Threads starte und immer auf das ende eines threads warte bis ich einen anderen starte , bringt mir der thread ndoch nichts, dann kann ich es ja auch hintereinander berechnen.

    Naja, günstigerweise startest du zuerst alle 10 und joinst erst dann alle 10 (kannst dann ja sequentiell joinen, du musst ja sowieso auf das Ende aller warten und nicht auf das Ende des ersten Threads).

    MfG SideWinder



  • Ich habe ein Liste . Solange diese Liste gefüllt ist, werden die Threads gestartet, jeder Thread bekommt ein Elemtn der Liste. Der Thread fügt dann ein neues elemnt ein ( verändertes). Solange es halt geht. Deshalb weiß ich im vorfeld noch nicht wie viele threads ich strtaen muss



  • Wirft halt die Threads in eine Collection?!

    MfG SideWinder



  • was meinst du damit
    soll ich z.b die thread in eine arraylist ablgene



  • Genau, du startest jeden Thread und legst ihn in eine ArrayList. Sobald alle gestartet sind (also diese ursprüngliche Liste leer ist), kannst du beginnen in einer Schleife alle Threads zu joinen, das hängt dann zwar bei join() bis der erste fertig ist, aber das kann dir ja wie oben schon erwähnt egal sein, weil du sowieso auf das Ende aller Threads warten musst.

    MfG SideWinder



  • Habe gerade auch noch die Klasse ThreadGroup gefunden, quasi eine Collection extra dafür. Gibt zwar (komischerweise...) keine join()-Methode für alle Sub-Threads, aber immerhin hat das ganze einen Namen.

    Edit: ThreadGroup scheint ziemlich crappy zu sein, bleib bei der Collection-Methode.

    MfG SideWinder



  • Besten Dank für die ausführliche beschreibung
    werde es mal veruschen.



  • Hallo
    ich habe das mit den Threads mal probiert. Frage bringt es überhaupt etwas Threads einzusetzen. Ich habe 3 kerne, habe aber den eindruck, dass es mit dem einsatz von threads nicht wirklich schneller geht



  • Fischkopf2009 schrieb:

    Hallo
    ich habe das mit den Threads mal probiert. Frage bringt es überhaupt etwas Threads einzusetzen. Ich habe 3 kerne, habe aber den eindruck, dass es mit dem einsatz von threads nicht wirklich schneller geht

    Dann machst du irgendwas falsch oder der Programmteil ist dafür nicht so gut geeignet. Ein typischer Fehler wäre z.B., Threads mit sehr geringer Laufzeit für jeden Teiljob neu zu erzeugen. Denn irgendwann killt der Overhead die Zeitersparnis. Man sollte lieber einmal 3 (bzw. Anzahl der Kerne) Threads erzeugen und die dann füttern.



  • Njaa ich erzeuge ca. über 1000 von solchen threads.

    Aber du hast recht ich werde so 5 mir anlegen und die dann der reihe nach "füttern"



  • Fischkopf2009 schrieb:

    Hallo
    ich habe das mit den Threads mal probiert. Frage bringt es überhaupt etwas Threads einzusetzen. Ich habe 3 kerne, habe aber den eindruck, dass es mit dem einsatz von threads nicht wirklich schneller geht

    Fischkopf2009 schrieb:

    Njaa ich erzeuge ca. über 1000 von solchen threads.

    Aber du hast recht ich werde so 5 mir anlegen und die dann der reihe nach "füttern"

    entbehrt jeder logik


Anmelden zum Antworten