第四章 執行緒執行者(一)引言
阿新 • • 發佈:2018-12-23
宣告:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González 譯者:許巧輝 校對:方騰飛
在這個章節中,我們將覆蓋:
- 執行多個任務並處理所有結果
- 執行者延遲執行一個任務
- 執行者週期性地執行一個任務
- 執行者取消一個任務
- 執行者控制一個任務完成
- 執行者分離任務的啟動和結果的處理
- 執行者控制被拒絕的任務
引言
通常,當你在Java中開發一個簡單的併發程式設計應用程式,你會建立一些Runnable物件並建立相應的Thread物件來執行它們。如果你開發一個執行多個併發任務的程式,這種途徑的缺點如下:
- 你必須要實現很多相關程式碼來管理Thread物件(建立,結束,獲得的結果)。
- 你必須給每個任務建立一個Thread物件。如果你執行一個大資料量的任務,那麼這可能影響應用程式的吞吐量。
- 你必須有效地控制和管理計算機資源。如果你建立太多執行緒,會使系統飽和。
為了解決以上問題,從Java5開始JDK併發API提供一種機制。這個機制被稱為Executor framework,介面核心是Executor,Executor的子介面是ExecutorService,而ThreadPoolExecutor類則實現了這兩個介面。
這個機制將任務的建立與執行分離。使用執行者,你只要實現Runnable物件並將它們提交給執行者。執行者負責執行,例項化和執行這些執行緒。除了這些,它還可以使用執行緒池提高了效能。當你提交一個任務給這個執行者,它試圖使用執行緒池中的執行緒來執行任務,從而避免繼續建立執行緒。
Callable介面是Executor framework的另一個重要優點。它跟Runnable介面很相似,但它提供了兩種改進,如下:
- 這個介面中主要的方法叫call(),可以返回結果。
- 當你提交Callable物件到執行者,你可以獲取一個實現Future介面的物件,你可以用這個物件來控制Callable物件的狀態和結果。
在這章中提供了11個指南,展示瞭如何通過使用前面提及的類和Java併發API來處理Executor framework。