一般來說,執行緒的生命週期需要通過 new(新建)->start(就緒)->running(執行中)->dead(消亡)
假設每個狀態到下乙個狀態需要的時間是
1,2,3 秒
但是我們往往只是關心running 那個狀態就可以了,這是執行緒需要執行的任務
使用執行緒池,建立一定數量的執行緒,專門執行任務的run 方法,實現了執行緒的復用,同時也減少了其他狀態的佔比,提高了整個系統的執行效率
核心執行緒,最大執行緒,定義不好解釋,還是看這兩個引數在執行任務的過程中對worker 執行緒的建立的影響吧。
這兩個引數的目的是:
盡量少的建立執行緒(核心執行緒是初始化執行緒池時建立的,當有任務來時,核心執行緒都忙,則往佇列放,而不是立刻建立執行緒)
盡量快的執行任務(優先使用核心執行緒執行任務,不夠,再入隊,隊滿,使用新執行緒執行)
控制最大執行緒數(資源的限制)
記憶:任務到來,優先使用核心執行緒,核心執行緒數不夠,再排隊,佇列排滿再開啟新執行緒執行任務,核心執行緒+非核心執行緒數達到最大執行緒數,則將任務交給拒絕策略處理。
fixedexcutor:固定執行緒池大小
singlethreadpool:單執行緒,
cachedthreadpool:可快取
executors.
newcachedthreadpool()
; executors.
newsinglethreadexecutor()
;//單執行緒執行緒池
executors.
newfixedthreadpool(2
);//固定執行緒池大小
使用阻塞佇列去放置未被執行的任務
worker 執行緒則是在執行完當前任務後,從佇列中取出任務執行
核心構造方法:
threadpoolexecutor
(int corepoolsize,
// 核心執行緒數
int maximumpoolsize,
// 最大執行緒數
long keepalivetime,
// 執行緒閒閒置存活時間,如果閒置時間超過改時間,則**該執行緒(長時間沒任務)
timeunit unit,
// 時間單位
blockingqueue
workqueue)
//任務佇列
add/offer 入隊,前者佇列滿時,會丟擲異常,後者會返回false,offer 還可以設定時間引數,限時入隊
peek/pool 返回隊頭元素,前者返回,但是不移除,後者返回且移除
讀寫鎖的使用 (reentrantlock)takelock,putlock
響應快:系統啟動就建立一部分執行緒
降低資源消耗:重複利用機制,減少執行緒重複建立銷毀造成的損耗
提高執行緒可管理性:統一分配,調優和監控
執行緒池核心引數及引數設定
2.執行緒池引數設定 threadpoolexecutor是建立執行緒池的核心類,它定義了一些建構函式用來建立執行緒池,如下是它的其中乙個建構函式 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepaliv...
執行緒核心引數? 如何合理配置執行緒池引數?
預設配置 corepoolsize 1 queuecapacity integer.max value maxpoolsize integer.max value keepalivetime 60秒 allowcorethreadtimeout false rejectedexecutionhand...
執行緒池引數及佇列
引數名 含義corepoolsize 核心執行緒數 maximumpoolsize 最大執行緒數 keepalivetime 時間單位 空閒執行緒的存活時間 workqueue 用於存放任務的佇列 threadfactory 執行緒工廠 用來建立新執行緒 handler 處理別拒絕的任務 corep...