Som*_*guy 2 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");
}
Run Code Online (Sandbox Code Playgroud)
我有一个未实现的方法,该方法抛出AssertionError来提醒我实现它,但是它完全被吞没了,没有任何迹象表明存在严重错误。
小智 6
它不被吞没,在那儿:
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");
}
Run Code Online (Sandbox Code Playgroud)
您在调用get方法时出错,该方法将为您提供计算结果(如果成功的话),否则返回错误。
java.util.concurrent.ExecutionException:java.util.concurrent.FutureTask.report(FutureTask.java:122)处的java.lang.AssertionError在java.util.concurrent.FutureTask.get(FutureTask.java:192)处...