Bringt eine In-Thread-Uncaught-Ausnahme nur den Thread oder den gesamten Prozess ab?

8

Wenn eine Ausnahme innerhalb eines Threads ausgelöst wird, ohne sie irgendwo anders abzufangen, wird dann die gesamte Anwendung / der gesamte Interpreter / Prozess beendet? Oder wird es nur den Thread töten?

    
taper 22.11.2012, 13:21
quelle

2 Antworten

11

Versuchen wir es:

%Vor%

Der obige Code liefert die folgenden Ergebnisse:

%Vor%

Die Antwort auf Ihre Frage ist also, dass eine ausgelöste Exception nur den Thread abstürzt, in dem sie sich befindet, nicht das ganze Programm.

    
Bo Milanovich 22.11.2012 13:29
quelle
5

Aus der Threading-Dokumentation :

  

Sobald die Aktivität des Threads gestartet wurde, wird der Thread berücksichtigt   'am Leben'. Es hört auf zu leben, wenn seine Methode run () beendet wird -   entweder normal oder durch Auslösen einer nicht behandelten Ausnahme. Das is_alive ()   Methode testet, ob der Thread lebt.

Und auch:

  

join (Zeitüberschreitung = Keine)

     

Warten Sie, bis der Thread beendet ist. Dies blockiert den aufrufenden Thread, bis der Thread, dessen Join () -Methode aufgerufen wird, beendet wird - entweder   normalerweise oder durch eine unbehandelte Ausnahme - oder bis zum optionalen   Timeout auftritt.

Mit anderen Worten, die nicht abgefangene Ausnahme ist eine Möglichkeit, einen Thread zu beenden, und wird im Aufruf join des übergeordneten Objekts in diesem Thread erkannt.

    
Eli Bendersky 22.11.2012 13:34
quelle