在Java 中捕獲執行緒中的例外狀況
在多執行緒應用程式中,管理不同執行緒中拋出的例外狀況可能是一個挑戰。考慮一個場景,主類別啟動一個新執行緒並嘗試捕獲它產生的任何運行時異常。
// Original Code public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; try { t.start(); t.join(); } catch (RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stopped"); } }
在此程式碼中,主執行緒使用 join() 等待子執行緒完成方法。然而,當子執行緒拋出異常時,主執行緒不會捕獲它。
執行緒的未擷取異常處理程序
為了解決這個問題,Java 提供了 Thread .UncaughtExceptionHandler 介面。透過實作這個介面並將其分配給一個線程,您可以處理該線程中拋出的未捕獲的異常。
// Using Uncaught Exception Handler public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread th, Throwable ex) { System.out.println("Uncaught exception: " + ex); } }; Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; t.setUncaughtExceptionHandler(h); t.start(); t.join(); System.out.println("Main stopped"); } }
在這個修改後的程式碼中:
以上是Java中如何捕捉線程拋出的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!