建立執行緒池的方法
1、使用jdk1.5自帶的executors框架建立執行緒池。
executors框架提供了4種執行緒池的建立方法
public static executorservice newfixedthreadpool(int nthreads)
特點:
1、執行緒池的核心執行緒數和最大執行緒數都是初始建立時傳入的執行緒數,
2、空閒執行緒結束的超時時間為0
3、使用的linkedblockingqueue阻塞佇列,該阻塞佇列是鏈
表結構的無解佇列
public static executorservice newsinglethreadexecutor()
特點:
1、核心執行緒和最大執行緒都是1,
2、空閒執行緒結束的超時時間為0
3、使用的也是linkedblockingqueue阻塞佇列
public static executorservice newcachedthreadpool()
特點:
1、核心執行緒數為0
2、執行緒池最大執行緒為integer.max_value
3、空閒執行緒結束超時時間為60s
4、使用的是synchronousqueue阻塞佇列,該阻塞佇列不會儲存元素
public static scheduledexecutorservice newscheduledthreadpool(int corepoolsize)
public scheduledthreadpoolexecutor(int corepoolsize)
該執行緒池的特點建立乙個可定時執行任務的執行緒池
executors框架分析
1、executors框架提供的集中建立執行緒池的方法,底層實際上都是使用了如下構造方法
public threadpoolexecutor(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueueworkqueue)
引數介紹:
corepoolsize:核心執行緒的數量,執行緒池在建立之後會一直存在的執行緒數量
maximimpoolsize:執行緒池的最大執行緒數
keepalivetime:空閒執行緒的超時時間(當乙個執行緒處於空閒狀態時,空閒多久會被停止)
unit:空閒時間的時間單位
workqueue:阻塞佇列
handler:決絕策略(如果執行緒已經達到最大且阻塞佇列也已經滿了,執行緒池要執行的處理策略)
2、執行分析
3、常用的阻塞佇列的介紹
4、拒絕策略
private static final rejectedexecutionhandler defaulthandler =
new abortpolicy();
abortpolicy:如果建立執行緒池不傳拒絕策略,則預設使用該策略。
該策略表示當執行緒池佇列滿了且達到最大執行緒時,直接拒絕處理,丟擲異常,讓呼叫者自行處理
discardpolicy:丟棄策略,執行緒池不做任何處理
discardoldestpolicy:丟棄舊的任務來執行新的任務
callerrunspolicy:既不拋棄新任務,也不拋棄舊任務,直接在當前的執行緒執行新的任務。當前執行緒一般都是主線程
如果需要自定義拒絕策略,可以實現rejectedexecutionhandler介面
5、建立執行緒的工廠
每當執行緒池需要建立乙個執行緒時,都是通過執行緒工廠來建立的,如果沒有指定執行緒工廠,就回使用預設的defaultthreadfactor
通過看defaultthreadfactory()類原始碼,該類實現了threadfactory介面,所以,如果有需要定製執行緒工廠,實現threadfactory介面即可
6、阻塞佇列的方法
執行緒池介紹
1.定義 執行緒池是一種多執行緒處理形式,處理過程中將任務新增 到佇列,然後在建立執行緒後自動啟動這些任務。2.作用 執行緒池的作用是限制系統中執行執行緒的數量。根據系統的環境情況,可以手動或是自動設定執行緒數量,達到執行的最佳效果。既不會浪費系統資源,還避免了系統擁擠。用執行緒池控制線程的數量,其...
執行緒池的介紹
構造相關的介紹 阻塞佇列,如果blockingqueue是空的,從blockingqueue取東西的操作將會被阻斷進入等待狀態,直到blockingqueue進了東西才會被喚醒,同樣,如果blockingqueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀態,直到blockingqueue...
執行緒池簡單介紹
執行緒池 1 fixedthreadpool 可重用固定執行緒數的執行緒池 2 singlethreadexecutor 單個worker執行緒的executor 3 cachedthreadpool 根據需要建立執行緒的執行緒池 corepoolsize為0,maximumpoolsize是無界的...