1. 程式人生 > >在try catch中開啟新的執行緒,不能捕獲執行緒裡面的異常

在try catch中開啟新的執行緒,不能捕獲執行緒裡面的異常

近期在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) {
		}
	}

}