[英]Java Future always returning null
嘿,我有一個關於 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();
}
我希望這會在我的終端上輸出“true”。 但它總是輸出空值。 我錯過了什么?
是FutureTask
拋棄了邏輯。 你的() -> true
是一個Callable<Boolean>
返回true
,但FutureTask
是一個不返回值的Runnable
。 因此submit
返回一個Future<Void>
(因為它得到一個Runnable
參數,而不是一個Callable
),它總是包含空值。
刪除不必要的FutureTask
包裝器,直接使用Callable
。
FutureTask
擴展了Runnable
接口
來自ExecutorService.submit(Runnable)
方法的 java 文檔:
提交一個 Runnable 任務以供執行,並返回一個代表該任務的 Future。 Future 的 {@code get} 方法將在成功完成后返回 {@code null}。
要獲得結果,您可以使用Callable
:
System.out.println(service.submit(() -> true).get());
或從任務中獲取結果:
FutureTask<Boolean> task = new FutureTask<>(() -> true);
service.submit(task);
System.out.println(task.get());
問題在於FutureTask
。 如果您使用Callable
或Runnable
調用您的服務,它會按預期工作並返回結果:
Future<?> result = service.submit(() -> true);
System.out.println(result.get()); // prints true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.