多線程異常第一種處理方式:局部處理
- 在多線程編程中,如果主線程出現異常,我們可以使用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子線程異常