Multithreading und Events

M_Kay

Mitglied
Hallo allerseits,

in einem Java-Programm möchte ich mehrere Threads auf einmal starten, die eine Berechnung vornehmen.
Sobald ein Thread fertig ist, soll anhand des Berechungs-Ergebnisses festgestellt werden, ob ein weiterer Thread gestartet wird, oder nicht.

Wie löst man das am besten?
Meine bisherige Idee ist, dass ich im Berechnungs-Thread ein Event auslöse, das im Aufrufer-Objekt (der EventListener) abgehört wird. Allerdings wird diese Handler-Methode des Aufrufer-Objekts dann ja im Berechnungs-Thread ausgeführt, oder?

EDIT:
Eine Möglichkeit ist mir noch eingefallen. Ich könnte auch einen FutureTask nutzen und dann in meinem Aufrufer-Thread zyklisch auf das Ergebnis eines Threads für eine gewisse Zeit warten. Wenn der Thread 1 nach 1 Sekunde noch kein Ergebnis hat, dann checke ich Thread 2 usw. Aber ob das so schön ist ....

Gruss,
M_Kay
 
Zuletzt bearbeitet:
Hallo,

ich würde den zweiten Ansatz bevorzugen, wenn dein eigentlicher Hauptthread das Ruder in der Hand behalten soll.
Allerdings würde ich lieber den Berechnungsthreads einen setter zur Verfügung stellen, mit dessen Hilfe sie ihr Ergebnis irgendwo (in einer Membervariable zum Beispiel) ablegen können. Und genau dort kannst du dann regelmäßig vorbeischauen. So sparst du dir das einzelne Befragen deines gesamten Thread-Pools...

Ansonsten kannst du natürlich im Sinne deines ersten Ansatzes im EventListener einfach einen neuen Thread starten, der dann als neuer Hauptthread fungiert und (der Sauberkeit halber) vermutlich die anderen noch laufenden Thread beenden kann. Wobei sich die Frage stellt, was dagegen spricht, dass der Berechnungsthread, der ein Ergebnis gefunden hat, nun als neue Aufgabe den Hauptthread repräsentiert. Hier müsstest du dich nur sauber der anderen Berechnungsthreads entledigen, nicht dass drei Berechnungsthreads zu einem Ergebnis kommen und nebeneinander als neue Hauptthreads antreten wollen...

Ohne deine Problematik weiter zu kennen, kann ich leider nicht spezifischer werden ;)


Viele Grüße
Carron
 
Zurück