Java併發編程之線程異常

多線程異常第一種處理方式:局部處理

  • 在多線程編程中,如果主線程出現異常,我們可以使用try/catch等方式輕鬆的處理異常;
  • 如果子線程出現異常,則需要在每個子線程中可能發生異常的地方用try/catch進行處理,代碼如下:
public class CommonThread implements Runnable {
    @Override
    public void run() {
        try {
            throw new RuntimeException();
        } catch (Exception e) {
            System.out.println("捕獲到" + Thread.currentThread().getName() + "子線程異常");
        }
    }

    public static void main(String[] args) {
        new Thread(new CommonThread(), "線程1").start();
        new Thread(new CommonThread(), "線程2").start();
    }
}
捕獲到線程1子線程異常
捕獲到線程2子線程異常

多線程異常第二種處理方式:全局處理

  • 一旦需要開啓的線程數較多,我們則需要在每個線程需要執行的run方法裏面用try/catch捕獲,這無疑是什麼繁瑣的,因此我們可以用UncaughtExceptionHandler進行全局線程異常捕獲,代碼如下:
public class UncaughtInThread implements Runnable {


    @Override
    public void run() {
        throw new RuntimeException();
    }

    public static void main(String[] args) {
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println(t.getName() + "發生異常:" + e);
            }
        });
        new Thread(new UncaughtInThread(), "線程1").start();
        new Thread(new UncaughtInThread(), "線程2").start();
    }
}
捕獲到線程1子線程異常
捕獲到線程2子線程異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章