可以使用线程池的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/ivWH 著作权归作者所有。请勿转载和采集!

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