在try catch中開啟新的執行緒,不能捕獲執行緒裡面的異常
阿新 • • 發佈:2018-11-24
近期在review程式碼的時候發現,有些人為了圖方便,直接在程式碼引用的最外層放上一個try catch,以為可以捕獲一切異常,降低崩潰率。
事實上,如果try的是新開啟的一個執行緒,那麼這個執行緒裡面出現的異常是catch不到。也就是說在A執行緒中new B執行緒,B執行緒中出現的crash跟A執行緒無關,A也catch不到。
public class TheadExceptionTest { public static void main(String[] args) { try { new Thread(new Runnable() { @Override public void run() { int i = 1 / 0; } }).start(); } catch (Exception e) { } } }
這樣的try是不不到異常的。需要在Thread裡面加上try catch。
public class TheadExceptionTest { public static void main(String[] args) { try { new Thread(new Runnable() { @Override public void run() { try { int i = 1 / 0; } catch (Exception e) { System.out.println("cannot / by zero!!!"); } } }).start(); } catch (Exception e) { } } }