主要用于多线程场景中,可能存在某些未知的异常没有捕获到,这类没有捕获到的异常会导致程序错误,甚至停止,而且无法在日志中找到关于这种错误的原因中,事后不方便排查。其实java中提供了一种方法来处理这种未捕获的异常的方法。在Thread类中有一个方法可以设置一个对象来单独处理这类卫捕获异常。需要注意的是,该方式仅仅是辅助在出现未捕获异常后的收尾处理,无法让程序跳过异常继续执行。
示例代码如下:
在23行抛出一个异常后,会被uncaughtException方法进行处理,然后线程结束,26行并不会被执行到。如果需要对某个线程进行单独的未捕获异常处理,可以对该线程进行单独设置,调用thread.setUncaughtExceptionHandler(UncaughtExceptionHandler eh)。
package com.test.concurrent;
import java.util.Arrays;
// lowlevel/CaptureUncaughtException.java
import java.util.concurrent.*;
import org.apache.log4j.Logger;
/**
* 会抛出未捕获异常的类
* @author Administrator
*
*/
class ExceptionThread2 implements Runnable {
@Override
public void run() {
Thread t = Thread.currentThread();
System.out.println("run() by " + t.getName());
System.out.println("eh = " + t.getUncaughtExcepti