Seite 1 von 1

[Java] Thread-Ende melden.

Verfasst: 02.10.2011, 22:59
von Salacryl
hi,

Gibt es in Java tatsächlich nichts vorgefertigtes um über ein Ende eines Threads informiert zu werden? Ich habe das so gelöst, dass die Thread-Verwaltungsklasse einen zusätzlichen Thread startet, der immer durchläuft und prüft ob ein Thread aus der Liste nicht mehr arbeitet um dann einen gemappten Actionslisterner zu starten.

Ich mein es funktioniert. Doch:

1.) wundert es mich, dass es von Java noch nichts eigenes hat.
2.) Denke ich zu verquer und es gibt eine elegantere Lösung?

Gruß,
Björn

Re: [Java] Thread-Ende melden.

Verfasst: 02.10.2011, 23:11
von Artificial Mind
Moin,

wenn du in der Verwaltungsklasse auch neue Threads startest, dann könntest du ja quasi eine Startfunktion um die eigentliche Threadfunktion legen, die in einem try { ... } finally Block die eigentliche Routine aufruft und im finally die gewünschte Action ausführt.

Re: [Java] Thread-Ende melden.

Verfasst: 03.10.2011, 00:01
von Salacryl
Hi,

also quasi isAlive() ignorieren und nach der Arbeit den actionPerformed aufruft. Ginge grundsätzlich, aber da bin ich korrinterkacker: der Thread ist dann nicht wirklich beendet.

Gruß,
Björn

Re: [Java] Thread-Ende melden.

Verfasst: 03.10.2011, 00:12
von Artificial Mind
Moin,

die Frage ist auch, in welchem Kontext/Thread soll actionPerformed aufgerufen werden?

Re: [Java] Thread-Ende melden.

Verfasst: 03.10.2011, 00:23
von Salacryl
hi,

ich übergebe der WächterKlasse zu jeder Aufgabe einen eigenen ActionListener. Dieser Wird aufgerufen, sobald ein Thread beendet ist. Das praktische an den Listener ist, ich kann sowohl Instanzen, welche von "object" erben, übergeben, als auch Strings.

Gruß,
Björn

Re: [Java] Thread-Ende melden.

Verfasst: 03.10.2011, 00:45
von Artificial Mind
Moin,

meine Frage zielte darauf ab, in welchem Thread der ActionListener aufgerufen werden soll. Da gibt es ja durchaus Unterschiede in der Synchronisierung.

So wie ich das sehe hast du 3 offensichtliche Möglichkeiten:
1. Der Actionlistener wird in dem Thread aufgerufen, dessen Beendigung er anzeigen soll (das war mein erster Vorschlag)
2. Der Actionlistener wird in einem zusätzlichen Thread aufgerufen (dies war deine Lösung)
3. Der Actionlistener wird im GUI-Thread aufgerufen (hat auch seine Vorteile)

Die Möglichkeiten sind geordnet nach Synchronisierungsaufwand (von viel nach wenig) und der Reaktionszeit (von schnell nach langsam)

Re: [Java] Thread-Ende melden.

Verfasst: 03.10.2011, 11:04
von Salacryl
hi,

so jetzt bin ich wieder etwas fitter.

Ok, ich wollte lediglich wissen, ob ich das Rad neu erfand oder es zumindest eine von möglichen Designs ist. Meine Anwendungs ist nicht so Zeit relevant, dass ich mir den Kopf um ein paar Millisekunden machen muss. Die Threads brauche ich nur um die GUI bedienungsfähig zu halten.

Danke dir.
Gruß,
Björn

Re: [Java] Thread-Ende melden.

Verfasst: 03.10.2011, 16:29
von Chromanoid
Nimm nen ExecutorService und nutze die Futures. Die haben eine isDone Funktion. Der ExecutorService hat außerdem eine isTerminated-Funktion... edit: hab überlesen, dass du informiert werden willst. Es gibt verschiedene libs, die sowas nachliefern. Allerdings würde ich eher versuchen ohne sowas auszukommen.