嘿,我有一个关于 Java Futures 的快速问题。我将问题分解为以下代码段:
ExecutorService service = Executors.newCachedThreadPool();
try {
System.out.println(service.submit(new FutureTask<>(() -> true)).get());
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (ExecutionException e1) {
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我希望这会在我的终端上输出“true”。但它总是输出空值。我错过了什么?
这就是在FutureTask抛弃逻辑。你() -> true是Callable<Boolean>返回true,但是FutureTask是一个Runnable不返回值。因此submit返回 a Future<Void>(因为它正在获取一个Runnable参数,而不是 a Callable),它总是包含空值。
删除不必要的FutureTask包装器,直接使用Callable。