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/ivWH 著作权归作者所有。请勿转载和采集!