2016-06-19 7 views
2

Wenn ein Thread aufgrund einer Ausnahme abstirbt, was passiert mit diesem Thread? Wenn es sich in einem Thread-Pool befindet, spawnt es einen neuen Thread? Ich interessiere mich dafür, was in scala ExecutionContext passiert, aber da ein ExecutionContext einen Java-Thread-Pool umschließt, denke ich, dass Java-Benutzer auch die Antwort kennen werden.Werden tote Threads in einem ExecutionContext- und/oder Java-Thread-Pool ersetzt?

Zum Beispiel, wenn ich einen ExecutionContext einen FixedThreadPool (100) Wrapping, wenn ein Thread stirbt, ersetzt er Thread-Pool den Thread?

+4

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int- –

+2

* Wenn ein Thread, bevor während der Ausführung aufgrund eines Fehlers beendet zum Herunterfahren, ein neues wird seinen Platz einnehmen, wenn es benötigt wird, um nachfolgende Aufgaben auszuführen. * –

Antwort

5

Der Thread selbst kann nach dem Absturz keinen neuen Thread erzeugen, der Thread-Pool kann ihn jedoch ersetzen. Beispielsweise ersetzt der Threadpool, der von Executors.newFixedThreadPool() erstellt wird, bei Bedarf tote Threads. Aus der Dokumentation für Executors.newFixedThreadPool():

„Wenn ein Thread zu einem Ausfall während der Ausführung aufgrund endet vor Abschaltung, wird ein neuer an seine Stelle treten, wenn nötig nachfolgende Aufgaben auszuführen“

+0

wird dieser neue Thread die Aufgabe von vornherein ausführen oder fortfahren, wo der tote Thread gestoppt wurde? – masSdev