簡體   English   中英

Java Future 總是返回 null

[英]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 如果您使用CallableRunnable調用您的服務,它會按預期工作並返回結果:

Future<?> result = service.submit(() -> true);

System.out.println(result.get()); // prints true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM