In einem Java-Multithread-Programm dürfen nicht alle Threads nicht abgefangene geprüfte Ausnahmen auslösen, was bedeutet, dass jeder Thread seine eigenen geprüften Ausnahmen verarbeiten muss. Dies wird durch die Methodendeklaration java.lang.Runnable.run() eingeschränkt (da es in dieser Methodendeklaration keinen Teil zum Auslösen einer Ausnahme gibt). Der Thread kann jedoch immer noch eine ungeprüfte Ausnahme auslösen. Wenn eine solche Ausnahme ausgelöst wird, wird der Thread beendet, und der Hauptthread und andere Threads sind überhaupt nicht betroffen, und die von einem bestimmten Thread ausgelöste Ausnahme wird nicht wahrgenommen all (es heißt auch, dass diese Ausnahme überhaupt nicht abgefangen werden kann). Dieses Design der JVM basiert auf dem Konzept: „Threads sind unabhängig ausgeführte Codefragmente. Thread-Probleme sollten vom Thread selbst gelöst werden, anstatt nach außen delegiert zu werden.“ oder ungeprüfte Ausnahmen) sollten innerhalb der Thread-Codegrenzen (innerhalb der Ausführungsmethode) abgefangen und behandelt werden.
Wenn der Thread jedoch nicht versucht, eine ungeprüfte Ausnahme selbst abzufangen, und wir diese Ausnahme außerhalb der Thread-Codegrenzen (außerhalb der Ausführungsmethode) abfangen und behandeln möchten, bietet uns Java eine Möglichkeit, eine Ausnahme abzufangen, wenn eine Ausnahme auftritt innerhalb des Threads Der Rückrufmechanismus zur Behandlung von Ausnahmen außerhalb der Thread-Codegrenze ist die vom Thread-Objekt bereitgestellte Methode setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh).
Durch Festlegen eines UncaughtExceptionHandlers für einen Thread über diese Methode können Sie sicherstellen, dass beim Auftreten einer Ausnahme im Thread die öffentliche Methode void uncaughtException (Thread t, Throwable e) der Schnittstelle UncaughtExceptionHandler zurückgerufen werden kann Der Zweck besteht darin, dass es im Thread verwendet werden kann. Außerhalb der Codegrenzen (außerhalb der run()-Methode von Thread) gibt es einen Ort, an dem nicht abgefangene Ausnahmen behandelt werden können. Was aber besonders klar sein sollte, ist, dass die Ausnahme zwar in der Callback-Methode behandelt wird, sich die Callback-Methode jedoch bei der Ausführung immer noch in dem Thread befindet, der die Ausnahme ausgelöst hat!
Im Vergleich zur obigen Methode gibt es eine andere Programmiermethode, die als Referenz verwendet werden kann. Das heißt, manchmal möchte der Aufrufer des Hauptthreads nur wissen, welche Ausnahmen während der Ausführung des Unterthreads aufgetreten sind, dies ist jedoch nicht unbedingt der Fall Behandeln Sie sie oder behandeln Sie sie sofort. Dann kann die Methode zum Initiieren eines untergeordneten Threads die vom untergeordneten Thread ausgelösten Ausnahmeinstanzen sammeln und als Ausnahmeliste an den Aufrufer zurückgeben, und der Aufrufer kann entsprechend der abnormalen Situation entscheiden, wie er reagieren soll . Es ist jedoch wichtig zu beachten, dass der untergeordnete Thread zu diesem Zeitpunkt bereits beendet wurde.