可以使用线程池的 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。

Java 线程池处理子线程异常并终止程序

原文地址: https://www.cveoy.top/t/topic/qdrI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录