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 固定大小執行緒池 服務端推薦使...