java - 为什么 Java 错误会被 ExecutorService 实例生成的线程吞噬?

标签 java multithreading executorservice

我认为 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 来提醒我去实现它,但它只是被吞没了,完全没有任何迹象表明存在严重错误。

最佳答案

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

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.lang.AssertionError at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) ...

关于java - 为什么 Java 错误会被 ExecutorService 实例生成的线程吞噬?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972555/

相关文章:

java - 如何使用 Spring Boot 和 AngularJS 将 JSON 对象插入数据库?

python - 使用 Pylons 和 WMI 时出现 "Win32 exception occurred releasing IUnknown at..."错误

multithreading - 调试一个线程会阻止其他线程?

multithreading - Clojure - 有效地同时增加列表中的数字

java - 我可以在 ThreadPool 中运行后台任务吗?

java - 在使用 DI 框架的项目中,您永远不应该使用 'new' 运算符吗?

java - 使用 appium 将元素滚动到 View 中不适用于 iOS

java - 在 Java 中使用计划执行器而不是硬循环来监视目录

Java 方法 : passing objects without defining them

java - 执行者服务中的执行者服务?