我认为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来提醒我实现它,但是它完全被吞没了,完全没有迹象表明存在严重错误。
答案 0 :(得分:4)
它没有被吞下,它在那里:
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位于 java.util.concurrent.FutureTask.report(FutureTask.java:122)在 java.util.concurrent.FutureTask.get(FutureTask.java:192)...