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;
}
}
}
【代碼積累】FutureTask
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.