Threads ExecutorService shutdown abbrechen und service "starten" ?

CHAOSFISCH

Bekanntes Mitglied
Hallo,

Ich hab eine Client (standalone) Anwendung die SwingWorker über einen ExecutorService im Hintergrund ausführt. Der User kann eine gestartete Queue stoppen und sofort beenden.
(shutdown() und shutdownNow())
Der User soll die Queue nach einem shutdown / shutdownNow wieder starten können.
Wie macht man das am sinnvollsten? Muss ein neuer ExecutorService erstellt werden, der erst aktiv werden darf wenn der alte Service terminated ist oder kann ich den bestehenden ExecutorService nach Aufruf von shutdown(), shutdownNow() wieder zum arbeiten bringen?

Gruß
CHAOSFISCH
 
:rtfm:
Laut Doku zu shutdown() bzw. shutdownNow():
Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.
This method does not wait for actively executing tasks to terminate. Use awaitTermination to do that.

Also, solltest Du, wenn erforderlich, warten bis Deine Threads sich beendet haben. Wenn es das ist, was Du häufig benötigst lohnt vielleicht auch ein Blick in [JAPI]CompletionService[/JAPI].
 
:rtfm:
Laut Doku zu shutdown() bzw. shutdownNow():


Also, solltest Du, wenn erforderlich, warten bis Deine Threads sich beendet haben. Wenn es das ist, was Du häufig benötigst lohnt vielleicht auch ein Blick in [JAPI]CompletionService[/JAPI].

Mh, ich glaub jetzt mal das der completionService mir direkt für das Problem nichts bringt.
Ich wollte einen ExecutionerService einsetzen, um damit Resourcen sparend zu arbeiten.
Mir ging es halt um die Wiederverwendbarkeit des ExecutionerService selbst.
Bsp: Ein ExService wird erzeugt, ihm werden "n" SwingWorker submited. Der User ruft den shutdown auf, sodass keine Aufträge mehr angenommen werden.
Der User möchte die Aufträge nun doch wieder fortsetzen, Möglichkeiten:
  1. Programm neustarten - ziemlich unschön
  2. Einen neuen ExService erstellen - ja dann brauch ich den ja gleich nicht benutzen?! Dann hab ich unter umständen einen unvollständigen shutdown in ExService 1 und einen zu großen Speicherverbrauch durch den ExService 2
  3. Wiederverwendung von ExService 1 - durch "starten" dieses Services - geht das?!
Oder soll ich es irgendwie anders umsetzen!?

Gruß
CHAOSFISCH
 
Seh ichs richtig das folgendes Sinn macht:
Für meine Zwecke wird eine neue Klasse geschrieben.
Diese überschreibt die gegebenen Methoden shutdown, shutdownNow etc - die die ich halt benötige.
Ich füge anschließend eine Methode hinzu die den ExecutorService - also den ThreadPoolXYZ erweitert, die mir den ExecutorService quasi wieder startet und ein shutdown "Rückgängig" machen kann?

Oder gibt es eine sinnvollere Lösung.
 

Zurück
Oben