三、阻塞等待異步結果FutureTask


一、簡介

默認的異步任務有些難以控制,有時候我們希望在當前線程獲取異步任務的結果。FutureTask可以幫助我們實現

JDK文檔:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/FutureTask.html

FutureTask實現了RunnableFuture接口,而RunnableFuture接口繼承了Runnable和Future。

同時,FutureTask接收一個Callable接口的實現類構造實例,在Runnable的run方法被執行的時候會去調用Callable的call方法,然后將處理結果set到輸出對象里面去。

Future的get方法,將獲取該輸出值,作為異步線程的返回結果。

二、代碼示例

以下代碼,我們創建了FutureTask實例,然后將它丟給一個線程去執行。

再調用get方法阻塞等待異步結果,異步線程執行futureTask以后,返回結果。get方法獲取結果以后,停止阻塞狀態,打印結果。

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class FutureTaskDemo {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask = new FutureTask<>(() -> {
            System.out.println("future task is called");
            Thread.sleep(2000);
            return "futureTask is done";
        });
        new Thread(futureTask).start();
        System.out.println(futureTask.get());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM