首页 > 解决方案 > 为什么 ExecutorService 实例产生的线程会吞下 Java 错误?

问题描述

我认为 Java 错误表明存在严重问题,不应该处理。那么,为什么这段代码运行良好?

public static void main(String[] args)
{
    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<?> future = executor.submit(() -> {throw new AssertionError();});
    while (!future.isDone()) {
    }
    System.out.println("done");
}

我有一个未实现的方法,它抛出了一个 AssertionError 来提醒我实现它,但它只是被吞没了,完全没有迹象表明有什么严重错误。

标签: javamultithreadingexecutorservice

解决方案


它没有被吞下,它就在那里:

public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<?> future = executor.submit(() -> {
            throw new AssertionError();
        });
        while (!future.isDone()) {
        }
        try {
            future.get();
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
        System.out.println("done");
    }

您在调用get方法时收到错误,如果成功,则为您提供计算结果,否则为错误。

java.util.concurrent.ExecutionException:在 java.util.concurrent.FutureTask.report(FutureTask.java:122) 在 java.util.concurrent.FutureTask.get(FutureTask.java:192) 的 java.lang.AssertionError ...


推荐阅读