1. 程式人生 > >第四章 執行緒執行者(一)引言

第四章 執行緒執行者(一)引言

宣告:本文是《 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。