Java 线程池处理子线程异常并终止程序
可以使用线程池的 submit 方法来提交任务,并通过 Future 对象来获取任务的执行结果。当子线程出现异常时,可以通过 Future 对象的 get 方法获取到异常信息,并在主线程中进行处理。
下面是一个示例代码:
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(1);
// 提交任务
Future<Integer> future = executorService.submit(() -> {
// 子线程执行的任务
throw new RuntimeException('子线程发生异常');
});
try {
// 获取任务的执行结果
int result = future.get();
System.out.println("任务执行结果:" + result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
// 子线程出现异常时,获取异常信息并处理
System.out.println("子线程执行出现异常:" + e.getCause().getMessage());
System.exit(1); // 终止程序执行,返回错误码
}
// 关闭线程池
executorService.shutdown();
}
}
在上述代码中,我们使用 Executors.newFixedThreadPool(1) 来创建一个固定大小为 1 的线程池。然后使用 executorService.submit() 方法来提交任务,并得到一个 Future 对象。通过 Future 对象的 get 方法可以阻塞主线程,直到子线程执行完成并返回结果。如果子线程出现异常,将会抛出一个 ExecutionException 异常,我们可以通过 getCause 方法获取到子线程抛出的异常信息,并在主线程中进行处理。在本例中,我们直接输出异常信息,并使用 System.exit(1) 来终止程序执行并返回错误码 1。
原文地址: https://www.cveoy.top/t/topic/qdrI 著作权归作者所有。请勿转载和采集!