[Java] Thread-Ende melden.

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Salacryl
Beiträge: 45
Registriert: 08.12.2003, 07:01
Kontaktdaten:

[Java] Thread-Ende melden.

Beitrag 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
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [Java] Thread-Ende melden.

Beitrag 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.
Salacryl
Beiträge: 45
Registriert: 08.12.2003, 07:01
Kontaktdaten:

Re: [Java] Thread-Ende melden.

Beitrag 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
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [Java] Thread-Ende melden.

Beitrag von Artificial Mind »

Moin,

die Frage ist auch, in welchem Kontext/Thread soll actionPerformed aufgerufen werden?
Salacryl
Beiträge: 45
Registriert: 08.12.2003, 07:01
Kontaktdaten:

Re: [Java] Thread-Ende melden.

Beitrag 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
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: [Java] Thread-Ende melden.

Beitrag 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)
Salacryl
Beiträge: 45
Registriert: 08.12.2003, 07:01
Kontaktdaten:

Re: [Java] Thread-Ende melden.

Beitrag 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
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Java] Thread-Ende melden.

Beitrag 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.
Antworten