我們先定義一個Callable任務MyCallableTask:
步驟1:創建Callable實現類,並實現call()接口
package cn.cetc;//包名可自定義
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
class CallableTask implements Callable<Integer>{ @Override public Integer call() throws Exception { System.out.println("線程在進行計算"); Thread.sleep(3000); int sum = 0; for(int i=0;i<100;i++) sum += i; return sum; }
//以下是main()代碼,見下面部分 }
步驟2:借助FutureTask執行
FutureTask類同時實現了兩個接口,Future和Runnable接口,所以它既可以作為Runnable被線程執行,又可以作為Future得到Callable的返回值。
借助FutureTask執行的大體流程是:
public static void main(String[] args) throws InterruptedException, ExecutionException{ FutureTask<Integer> task = new FutureTask<Integer>(new CallableTask()); // 實質還是以Callable對象來創建、並啟動線程 new Thread(task , "有返回值的線程").start(); System.out.println(task.get()); }
通過futuretask可以得到MyCallableTask的call()的運行結果。
