JDK自帶線程池解析

原文:http://blog.csdn.net/whuqin/article/details/6578477

JDK1.5以後提供了使用線程池的方法,相關類放在java.util.concurrent,java.util.concurrent.atomic,java.util.concurrent.locks包中。經常使用的是java.util.concurrent,存放着在併發編程中很常用的實用工具類

本文主要分析java.util.concurrent包,常用類的結構圖如下:

Executor接口

作用:執行已提交的Runnable任務對象,即線程池。

方法:void execute(Runnable command)在未來某個時間執行給定的命令。該命令可能在新的線程、已入池的線程或者正調用的線程中執行,這由 Executor 實現決定。 

 

ExecutorService接口

作用:繼承Executor,提供了管理終止的方法,以及可爲跟蹤一個或多個異步任務執行狀況而生成Future的方法。(Future 表示異步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,並獲取計算的結果。)

兩種關閉方法:

void shutdown()啓動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則調用沒有其他作用。

List<Runnable> shutdownNow()試圖停止所有正在執行的活動任務,暫停處理正在等待的任務,並返回等待執行的任務列表。

簡單的說,shutdown使線程池停止接收新任務,shutdownNow停止處理正在執行的任務以及正在等待的任務。


ScheduledExecutorService接口

作用:豐富了ExecutorService,可以安排在給定的延遲後運行的命令,或定期執行的命令。schedule 方法使用各種延遲創建任務,並返回一個可用於取消或檢查執行的任務對象。

shedule方法:使用各種延遲創建任務,並返回一個可用於取消或檢查執行的任務對象。

 

ThreadPoolExecutor類

作用:一個 ExecutorService,它使用可能的幾個池線程之一執行每個提交的任務,通常使用 Executors 工廠方法配置。每個 ThreadPoolExecutor 還維護着一些基本的統計數據,如完成的任務數。

具體使用例子參考:http://blog.csdn.net/whuqin/archive/2011/07/01/6578470.aspx

JDK強烈建議使用較爲方便的 Executors 工廠方法 Executors.newCachedThreadPool()(無界線程池,可以進行自動線程回收)、Executors.newFixedThreadPool(int)(固定大小線程池)和 Executors.newSingleThreadExecutor()(單個後臺線程),它們均爲大多數使用場景預定義了設置。

 

Executors 類

作用:是一個工廠類,提供了生成多種類型的 Executor方法,使用這些工廠方法可以創建不同類型的線程池。

方法:有很多工廠方法,舉兩個如下。

public static ThreadFactory defaultThreadFactory()返回用於創建新線程的默認線程工廠。

public static ExecutorService newCachedThreadPool()創建一個可根據需要創建新線程的線程池。調用 execute 將重用以前構造的線程(如果線程可用)。如果現有線程沒有可用的,則創建一個新線程並添加到池中。終止並從緩存中移除那些已有 60 秒鐘未被使用的線程。因此,長時間保持空閒的線程池不會使用任何資源。

 

ThreadFactory接口

作用:根據需要創建新線程的對象。是最簡單得線程池了。

方法:Thread newThread(Runnable r)構造一個新 Thread。Executors.defaultThreadFactory() 方法提供了更有用的簡單實現,即在返回線程前將已創建線程的上下文設置爲已知的值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章