我认为 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/