1. 程式人生 > >FutureTask的簡單使用

FutureTask的簡單使用

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