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()); } }