- A+
在Java中,线程池可以使用Thread.UncaughtExceptionHandler接口来处理未捕获的异常。当线程池中的线程抛出未捕获的异常时,将会触发线程池的UncaughtExceptionHandler。如果没有为线程池设置自定义的UncaughtExceptionHandler,则会使用默认的UncaughtExceptionHandler。
以下是设置线程池UncaughtExceptionHandler的示例代码:
public class MyThreadExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Thread " + t.getName() + " threw an exception: " + e.getMessage());
}
}
public class ThreadPoolDemo {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.execute(new MyTask());
// 设置自定义的UncaughtExceptionHandler
executor.execute(new MyTask());
((ThreadPoolExecutor) executor).setUncaughtExceptionHandler(new MyThreadExceptionHandler());
executor.shutdown();
}
}
public class MyTask implements Runnable {
@Override
public void run() {
throw new RuntimeException("Exception in task");
}
}
在上面的示例代码中,我们创建了一个名为MyThreadExceptionHandler的类来实现Thread.UncaughtExceptionHandler接口。在ThreadPoolDemo类中,我们首先创建了一个ExecutorService实例,然后使用execute()方法来执行两个任务。第一个任务会抛出异常,而第二个任务会在抛出异常时使用我们自定义的MyThreadExceptionHandler来处理异常。
