java中线程池 中 线程执行异常时
时间: 2024-05-16 07:17:07 浏览: 92
Java线程池 JDK1.5
当线程池中的线程执行任务时发生异常,可以通过以下方式进行处理:
1. 在任务中使用 try-catch 块捕获异常,并在 catch 块中进行相应的处理。
2. 在线程池的构造函数中设置 UncaughtExceptionHandler 来处理未捕获的异常。例如:
```
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue);
executor.setThreadFactory(new ThreadFactoryBuilder().setNameFormat("my-thread-%d").setUncaughtExceptionHandler((t, e) -> System.out.println("Thread " + t.getName() + " throws exception: " + e)).build());
```
在上面的代码中,我们通过 setUncaughtExceptionHandler 方法为线程池中的线程设置了一个异常处理器,当线程抛出未捕获的异常时,处理器将会打印异常信息。
3. 使用 Future.get() 方法获取执行任务的返回结果,如果任务抛出异常,则 Future.get() 方法也会抛出 ExecutionException 异常,我们可以在调用 Future.get() 方法时使用 try-catch 块来捕获异常并进行相应的处理。
```
ExecutorService executor = Executors.newFixedThreadPool(10);
Future<Integer> future = executor.submit(() -> {
// do something
throw new RuntimeException("oops!");
});
try {
Integer result = future.get();
} catch (InterruptedException | ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof RuntimeException) {
// handle the exception
}
}
```
阅读全文