4 Stimmen

java - Thread.join() für ThreadPoolExecutor

Gibt es eine join()-ähnliche Methode für Threads, die über den ThreadPoolExecutor ausgeführt wurden?

Wenn ich stattdessen einige Callables an den Executor übermittle und die get()-Methode für die Futures, die sie zurückgeben, verwende, erhalte ich dann ein ähnliches Verhalten wie bei Thread.join()?

4voto

Moe Matar Punkte 2006

Sie sind sich insofern ähnlich, als sie beide Thread#join() y Future#get() wird blockiert, bis der Thread/die Tabelle beendet ist. In der Thread#join() Fall kehrt der Aufruf zurück, wenn der Thread stirbt. Es wird kein Ergebnis zurückgegeben. In der Future#get() Fall kehrt er zurück, wenn der aufrufbare Thread mit der Ausführung seiner Aufgabe fertig ist, aber der ausführende Thread stirbt nicht (er ist normalerweise Teil eines Thread-Pools, so dass er sich dem Pool wieder zur Verfügung stellt).

Wenn diese Aufgaben, die Sie an den ExecuterService übergeben, unternehmenskritisch sind, empfiehlt es sich, einen Shutdown-Hook in Ihre Anwendung einzufügen, der Folgendes aufruft threadPool.shutdown() um eine ordnungsgemäße Beendigung aller laufenden Threads zu ermöglichen, und wartet auf threadPool.isTerminated() wahr werden, oder wartet auf threadPool.awaitTermination(max time before force shutdown) um zurückzukehren.

2voto

Ryan Stewart Punkte 120600

Wenn Sie mit "ähnlich" meinen, dass Ihr aktueller Thread blockiert wird, bis die Arbeit erledigt ist, dann ja. Der Unterschied ist, dass Thread.join() blockiert, bis der betreffende Thread stirbt. Future.get() blockiert nur, bis die Callable oder Runnable, die Sie eingereicht beendet die Ausführung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X