java futureTask的使用

futureTask 它的意義在於去除主函數的等待時間,使得主函數在執行耗時操做時無需死等,只須要在將來task執行完畢,再獲取結果。java

 

下面的 futureTask 的一個簡單例子。函數

 

public class RealData implements Callable<String> {
    protected String data;

    public RealData(String data) {
        this.data = data;
    }


    public String call() throws Exception {
        //利用sleep方法來表示真是業務是很是緩慢的
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return data;
    }
}

  

public class Application {
    public static void main(String[] args) throws Exception {
        FutureTask<String> futureTask =
                new FutureTask<String>(new RealData("name"));

        ExecutorService executor =
                Executors.newFixedThreadPool(1); //使用線程池

        //執行FutureTask,至關於上例中的client.request("name")發送請求
        executor.submit(futureTask);
        //這裏能夠用一個sleep代替對其餘業務邏輯的處理
        //在處理這些業務邏輯過程當中,RealData也正在建立,從而充分了利用等待時間
        Thread.sleep(2000);
        //使用真實數據
        //若是call()沒有執行完成依然會等待
        System.out.println("數據=" + futureTask.get());
    }
}
相關文章
相關標籤/搜索