6.1 可執行對象
所以我們得到了包裹的最大部分。它將描述用於運行異步任務並能夠通過 Future 和 Callable 接口獲取結果的接口,以及用於創建線程池的服務和工廠:ThreadPoolExecutor、ScheduledPoolExecutor、ForkJoinPool。
為了更好地理解,讓我們對接口和類進行一些分解。
6.2 可執行對象的實現
Future<V>
是獲取異步操作結果的絕佳接口。這裡的關鍵方法是 get 方法,它會阻塞當前線程(有或沒有超時),直到另一個線程上的異步操作完成。還有其他方法可用於取消操作和檢查當前狀態。FutureTask 類通常用作實現。
RunnableFuture<V>
- 如果 Future 是客戶端 API 的接口,那麼 RunnableFuture 接口已經用於啟動異步部分。run() 方法的成功完成結束異步操作並允許通過 get 方法檢索結果。
Callable<V>
- 用於異步操作的 Runnable 接口的擴展模擬。允許您返回一個類型化的值並拋出一個已檢查的異常。即使此接口沒有 run() 方法,許多 java.util.concurrent 類也支持它和 Runnable。
FutureTask<V>
— Future/RunnableFuture 接口的實現。異步操作以 Runnable 或 Callable 對象的形式作為構造函數之一的輸入。FutureTask 類本身設計為在工作線程中啟動,例如,通過 new Thread(task).start() 或通過 ThreadPoolExecutor。異步操作的結果通過 get(...) 方法檢索。
Delayed
- 用於應該在未來開始的異步任務,以及在 DelayQueue 中。允許您設置異步操作開始前的時間。
ScheduledFuture<V>
- 結合了 Future 和 Delayed 接口的標記接口。
RunnableScheduledFuture<V>
- 結合了 RunnableFuture 和 ScheduledFuture 的接口。此外,您可以指定該任務是一次性任務還是應以指定頻率運行。
GO TO FULL VERSION