/**
* Created with IntelliJ IDEA.
* User: 菜鳥大明
* Date: 14-10-23
* Time: 下午7:02
* To change this template use File | Settings | File Templates.
*/
public class MyCallable1 implements Callable {
@Override
public Object call() throws Exception {
System.out.println("call");
return "end";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable1 myCallable1 = new MyCallable1();
FutureTask fk = new MyFutureTask(myCallable1);
// 它可以通過Thread包裝來直接執行,
// Thread thread = new Thread(fk);
// thread.start();
// 也可以提交給ExecuteService來執行,
// ExecutorService exec = Executors.newCachedThreadPool();
// Future<String> future = exec.submit(myCallable1);
// 並且還可以通過v get()返回執行結果,
// 在線程體沒有執行完成的時候,主線程一直阻塞等待,執行完則直接返回結果。
fk.run();
System.out.println(fk.get());
}
}
class MyFutureTask extends FutureTask {
public MyFutureTask(Callable callable) {
super(callable);
}
// 當線程運行結束,則運行done方法。
@Override
public void done() {
// 此處一般用來計算任務運行耗時解析。
System.out.println("done");
}
}
FutureTask類
FutureTask類是Future 的一個實現,並實現了Runnable,
所以可通過Executor(線程池)來執行,也可傳遞給Thread對象執行。
如果在主線程中需要執行比較耗時的操作時,但又不想阻塞主線程時,
可以把這些作業交給Future對象在後臺完成,當主線程將來需要時,
就可以通過Future對象獲得後臺作業的計算結果或者執行狀態。
Executor框架利用FutureTask來完成異步任務,並可以用來進行任何潛在的耗時的計算。
一般FutureTask多用於耗時的計算,主線程可以在完成自己的任務後,再去獲取結果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.