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子线程异常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章