Wie unterbricht ExecutorService die Threads
Bei der Verwendung der ExecutorService
zurückgegeben Executors.newSingleThreadExecutor()
wie kann ich es unterbrechen?
InformationsquelleAutor der Frage Ofek Ron | 2012-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um dies zu tun, müssen Sie die
submit()
eine Aufgabe zu einemExecutorService
eher als Berufungexecute()
. Wenn Sie dies tun, einFuture
zurückgegeben wird, die verwendet werden können, zu manipulieren, um die geplante Aufgabe. Insbesondere können Sie nennencancel(true)
auf die damit verbundenenFuture
zu unterbrechen, eine Aufgabe, die gerade ausgeführt wird, (oder überspringen Sie die Ausführung insgesamt ist, wenn die Aufgabe noch nicht gestartet wurde, läuft noch).Durch die Art und Weise, wird das Objekt zurückgegeben, die von
Vollstrecker.newSingleThreadExecutor()
ist eigentlich einExecutorService
.InformationsquelleAutor der Antwort erickson
Andere Möglichkeit zum unterbrechen des Auftragnehmers intern verwalteten thread(s) zu nennen, die
shutdownNow(..)
Methode auf IhreExecutorService
. Beachten Sie jedoch, dass im Gegensatz zu @erickson Lösung, dadurch wird das ganzeThreadPoolExecutor
immer ungeeignet für die weitere Verwendung.Ich finde dieses Vorgehen besonders nützlich in Fällen, in denen die
ExecutorService
wird nicht mehr benötigt und halten Registerkarten auf dieFuture
Instanzen ist ansonsten unnötig (ein Paradebeispiel dafür ist dieexit(..)
Methode der Anwendung).Relevanten Informationen aus der
ExecutorService#shutdownNow(..)
javadocs:InformationsquelleAutor der Antwort Priidu Neemre
Einem richtigen Weg sein könnte, customizing/Injektion der ThreadFactory für den executorservice und innerhalb der thread-Werk, Sie habe dem Griff der thread erstellt ist, dann können Sie planen, einige Aufgabe zu unterbrechen, der thread interessiert zu sein.
Demo-code-Teil für die überschrieben Methode "newThread" in ThreadFactory:
Dann können Sie unten, um zu konstruieren, Ihre executorservice Beispiel:
Dann nach 5 Sekunden ein interrupt-signal gesendet wird, um die Fäden in der executorservice.
InformationsquelleAutor der Antwort wtsolid