ExecutorService執行緒池

2022-09-08 06:45:10 字數 1394 閱讀 6672

**:

executorservice 建立多執行緒的步驟:

1。定義執行緒類

class handler implements runnable

2。建立executorservice執行緒池

3。呼叫執行緒池操作

幾種不同的executorservice執行緒池物件

1.newcachedthreadpool() 

-快取型池子,先檢視池中有沒有以前建立的執行緒,如果有,就reuse.如果沒有,就建乙個新的執行緒加入池中

-快取型池子通常用於執行一些生存期很短的非同步型任務

2. newfixedthreadpool

-newfixedthreadpool與cachethreadpool差不多,也是能reuse就用,但不能隨時建新的執行緒

-其獨特之處:任意時間點,最多只能有固定數目的活動執行緒存在,此時如果有新的執行緒要建立,只能放在另外的佇列中等待,直到當前的執行緒中某個執行緒終止直接被移出池子

-和cachethreadpool不同,fixedthreadpool沒有idle機制(可能也有,但既然文件沒提,肯定非常長,類似依賴上層的tcp或udp idle機制之類的),所以fixedthreadpool多數針對一些很穩定很固定的正規併發執行緒,多用於伺服器

-從方法的源**看,cache池和fixed 池呼叫的是同乙個底層池,只不過引數不同:

fixed池執行緒數固定,並且是0秒idle(無idle)

cache池執行緒數支援0-integer.max_value(顯然完全沒考慮主機的資源承受能力),60秒idle

3.scheduledthreadpool

-排程型執行緒池

-這個池子裡的執行緒可以按schedule依次delay執行,或週期執行

4.singlethreadexecutor

-單例執行緒,任意時間池中只能有乙個執行緒

-用的是和cache池和fixed池相同的底層池,但執行緒數目是1-1,0秒idle(無idle)

上面四種執行緒池,都使用executor的預設執行緒工廠建立執行緒,也可單獨定義自己的執行緒工廠

下面是預設執行緒工廠**:

也可自己定義threadfactory,加入建立池的引數中

public static executorservice newcachedthreadpool(threadfactory threadfactory) {

executor的execute()方法

execute() 方法將runnable例項加入pool中,並進行一些pool size計算和優先順序處理

execute() 方法本身在executor介面中定義,有多個實現類都定義了不同的execute()方法

如threadpoolexecutor類(cache,fiexed,single三種池子都是呼叫它)的execute方法如下:

執行緒池ExecutorService

執行緒池 任務提交到執行緒池,而不是直接交給某執行緒,執行緒池拿到任務後,它在內部找空閒的執行緒進行執行 封裝 任務是提交給執行緒池,乙個執行緒只能執行乙個任務,但可以同時向乙個執行緒池提交多個任務。建立固定大小的執行緒池 建立快取執行緒池 如何實現執行緒死掉後重新啟動?答案 建立單一執行緒池exe...

執行緒十四 ExecutorService

executorservice不僅能呼叫runnable的任務,它還提供了呼叫callable任務的方法。callable任務中的call方法能夠返回任務執行的結果,同時還可以丟擲受檢的異常,call方法宣告了乙個throws exception子句。為了描述executorservice的應用,我...

ExecutorService生命週期

executorservice介面繼承了executor介面,定義了一些生命週期的方法 public inte ce executorservice extends executor 本文,我們逐一分析裡面的每個方法。首先,我們需要建立乙個任務 這段任務 主要是隨機生成含有10個字元的字串 隨機生成...