四種執行緒池

2021-09-02 19:57:24 字數 1534 閱讀 8702

threadpoolexecutor的引數:

int coresize, 核心執行緒

int maxsize,最大執行緒

long time,空閒執行緒超時時間, 超時後銷毀

timeunit ,空閒時間單位

blockingqueue taskqueue,存放任務的佇列,

threadfactory threadfactory) 建立執行緒的執行緒工廠

當有新的任務時:

a. 如果此時執行緒數小於核心執行緒, 那麼將會建立乙個執行緒

b. 如果此時執行緒數大於等於核心執行緒,且沒有空閒執行緒, 那麼任務將會放在佇列中

c. 如果此時執行緒數大於等於核心執行緒,且沒有空閒執行緒,佇列已滿, 將會建立新的執行緒

d. 如果此時佇列已滿且執行緒數等於最大執行緒, 那麼丟擲異常, 任務提交失敗

核心執行緒是否銷毀取決於 設定 quitcore , true則不會銷毀

執行緒池的四種型別:

1. newcachedthread pool 可快取執行緒池

new threadpoolexecutor(0, integer.max_value, 60l , timeunit.seconds,

new synchronousqueue());

特點: 沒有核心執行緒, 最大執行緒為無限大, 所有執行緒空閒60s銷毀,

synchronousqueue容量為0,所有任務會立即被執行

2. newfixedthreadpool 定長線程池, 可控制線程最大併發數, 超出的執行緒會在佇列中等待

new threadpoolexecutor(nthreads, nthreads,0l, timeunit.milliseconds,

new linkedblockingqueue());

特點:只有核心執行緒, 由引數確定核心執行緒數, 超出的任務會在佇列中等待

3. newscheduledthreadpool 定長線程池, 支援定時及週期性任務執行

super(corepoolsize, integer.max_value, 0, timeunit.nanoseconds, new delayedworkqueue());

delayedworkqueue佇列, 可延時執行阻塞任務的佇列和linkedblockingqueue是兄弟關係

4. newsinglethreadexecutor 單執行緒化的執行緒池, 使用唯一的工作執行緒來執行任務, 保證所有任務先進先出的執行順序

threadpoolexecutor(1, 1, 0l, timeunit.milliseconds, new linkedblockingqueue()

執行緒之間的通訊方式:

volatile, synchronized , reentrantlock

wait / notify

管道輸入輸出流

thread.join()

threadlocal

四種執行緒池

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

android四種執行緒池

cachedthreadpool 可快取的執行緒池,如果執行緒池有空閒執行緒則復用空閒執行緒,如沒有空閒執行緒則建立執行緒 執行緒數沒有限制 執行緒執行超時則銷毀 引數部分看原始碼也很簡單 fixedthreadpool 有執行緒數量限制,如果執行緒數小於最大執行緒數,則無論有沒有空閒執行緒都會建立...

四種常見執行緒池

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