Future機制
1 為什么出現Future機制
常見的兩種創建執行緒的方式,一種是直接繼承Thread,另外一種就是實作Runnable介面,
這兩種方式都有一個缺陷就是:在執行完任務之后無法獲取執行結果,
從Java 1.5開始,就提供了Callable和Future,通過它們可以在任務執行完畢之后得到任務執行結果,
Future模式的核心思想是能夠讓主執行緒將原來需要同步等待的這段時間用來做其他的事情,
因為可以異步獲得執行結果,所以不用一直同步等待去獲得執行結果,
2 Future結構
類圖:

2.1 Future介面
Future介面用于對具體的Runnable或者Callable任務的執行結果進行取消、查詢是否完成、獲取結果,
必要時可以通過get方法獲取執行結果,該方法會阻塞直到任務回傳結果,
通過介面的定義,可以看到實作Future介面的子類會具有這些行為:
-
可以取消這個執行邏輯,如果這個邏輯已經正在執行,提供可選的引數來控制是否取消已經正在執行的邏輯,
-
可以判斷執行邏輯是否已經被取消,
-
可以判斷執行邏輯是否已經執行完成,
-
可以獲取執行邏輯的執行結果,
-
可以允許在一定時間內去等待獲取執行結果,如果超過這個時間,拋
TimeoutException,
2.2 FutureTask類
FutureTask是Future的具體實作,
FutureTask實作了RunnableFuture介面,RunnableFuture介面又同時繼承了Future 和 Runnable 介面,
所以FutureTask既可以作為Runnable被執行緒執行,又可以作為Future得到Callable的回傳值,
FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
Thread.sleep(3000);
return 5;
}
});
new Thread(task).start();
//task.get()
//,...
參考
Java的Future機制詳解
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110741.html
標籤:Java
