【代碼積累】FutureTask

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;



public class Test2 {
	public void Test2()
	{
		ExecutorService threadpool = Executors.newCachedThreadPool();
		FutureTask<Long> fTask = new FutureTask<Long>(new testTask());
		threadpool.execute(fTask);
		
		try {
			System.out.println("result = "+fTask.get());
		} catch (InterruptedException | ExecutionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		/*
		FutureStask 是Future<T>的實現類,同時也是Runnable的實現類,因此它可以被提交給Executor執行,作爲一個線程運行,並在此線程中
		處理關聯的線程的返回值。
		You would only need to use FutureTask if you want to change its behavior or access its Callable later. For 99% of uses, just use Callable and Future.
		FutureTask提供了一種異步方式獲取來獲取某個Callable線程的執行結果,stackoverflow的討論帖認爲,兩者僅有API上的區別,實際使用中,
		FutureTask並沒有太大的優勢。
		*/
		
		threadpool.shutdown();
	}
	
	public class testTask implements Callable<Long>
	{

		@Override
		public Long call() throws Exception {
			// TODO Auto-generated method stub
			int i = 1;
			long result = 0;
			
			for( ;i < 500000; i++ )  //計算一個累加值並返回
			{
				result += i;
			}
			
			return result;
		}
		
	}
}

發佈了75 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章