四種常見的執行緒池

2021-10-14 01:50:00 字數 1344 閱讀 3944

1. newcachedthreadpool

public static executorservice newcachedthreadpool()
執行流程如下:

提交任務到執行緒池。

因為corepoolsize為0,不建立核心執行緒,執行緒池最大為integer.max_value。

任務隊列為synchronousqueue佇列。

空閒執行緒會從synchronousqueue中獲取任務然後執行。如果沒有空閒執行緒就會建立乙個非核心執行緒執行

如果synchronousqueue已有任務在等待,入列操作將會阻塞

當有很多短時間的任務時,cachethreadpool執行緒復用率比較高,會提高效能。而且執行緒空閒時間達到60s後會被**,意味著即使沒有任務進來,newcachethreadpool並不會占用過多的資源。

2. newfixedthreadpool

public static executorservice newfixedthreadpool(int nthreads)
核心執行緒數量和匯流排程數量相等,都是傳入的引數nthreads,所以只能建立核心執行緒,不能建立非核心執行緒。因為linkedblockingqueue的預設大小是integer.max_value,故如果核心執行緒空閒,則交給核心執行緒處理;如果核心執行緒不空閒,則入列等待,直到核心執行緒空閒。

與cachedthreadpool的區別:

3.newsinglethreadexecutor

public static executorservice newsinglethreadexecutor()
有且僅有乙個核心執行緒(corepoolsize == maximumpoolsize = 1),並且linkedblockingqueue的空間很大,所以不會建立非核心執行緒。所有任務按照先來先執行的順序執行。當這個執行緒不空閒的時候,新來的任務會儲存在任務佇列中等待執行。

4. newscheduledthreadpool

建立乙個定時的執行緒池,支援定時和週期的任務執行。

public static scheduledexecutorservice newscheduledthreadpool(int corepoolsize)

public scheduledthreadpoolexecutor(int corepoolsize)

四種常見執行緒池

int size 3 快取執行緒池,執行緒池的大小由jvm決定,如果有空閒執行緒會 executors.newcachedthreadpool 單執行緒執行緒池,可保證任務執行的順序就是任務提交的順序 executors.newsinglethreadexecutor 固定大小執行緒池 服務端推薦使...

四種執行緒池

其他執行緒池 核心執行緒 執行緒池大小 佇列策略 newcachedthreadpool integer.max value synchronousqueue newfixedthreadpool 建立時可以設定引數 建立時可以設定引數 linkedblockingqueue newschedule...

四種執行緒池

threadpoolexecutor的引數 int coresize,核心執行緒 int maxsize,最大執行緒 long time,空閒執行緒超時時間,超時後銷毀 timeunit 空閒時間單位 blockingqueue taskqueue,存放任務的佇列,threadfactory thr...