FutureTask的簡單使用
阿新 • • 發佈:2018-12-25
FutureTask
建立FutureTask可用於接收執行緒的執行結果。一般Runable的接口裡的抽象方法run是void型的,我們如果想要拿到某個執行緒的執行結果來用,顯然重寫 run() 方法裡是不容易辦到的。我們就可以建立 FutureTask 傳入Callable介面的實現類,在實現類中重寫 T call() 方法,執行任務邏輯,等到我們需要執行緒的執行結果時,呼叫get方法就可以了
FutureTask 可用於非同步獲取執行結果或取消執行任務的場景。通過傳入 Runnable 或者Callable的任務給FutureTask,直接呼叫其run方法或者放入執行緒池執行,之後可以在外部通過 FutureTask 的 get 方法非同步獲取執行結果,因此,FutureTask 非常適合用於耗時的計算,主執行緒可以在完成自己的任務後,再去獲取結果。另外,FutureTask 還可以確保即使呼叫了多次 run 方法,它都只會執行一次 Runnable 或者 Callable 任務,或者通過 cancel 取消 FutureTask 的執行等。
@org.junit.Test
public void Test( ) {
// 建立FutureTask用來接收執行緒執行的結果
FutureTask<Integer> threadResult = new FutureTask<Integer>(new Callable<Integer>() {
int count = 0;
@Override
public Integer call() throws Exception {
// 執行一系列任務邏輯
count++;
return count;
}
});
// 開啟執行緒
new Thread(threadResult).start();
try {
// 拿到執行緒的執行結果
Integer result = threadResult.get();
System.err.println(result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}