先從構造方法裡面的引數開始說。
corepoolsize:核心執行緒數
核心執行緒是一定會存在著的執行緒,也就是說,如果你設定了假如說5,那麼不管這五個執行緒有沒有任務,都會被建立出來。
queuecapacity:阻塞佇列
當核心執行緒數被使用到了最大值後,新任務如果還需要建立執行緒,就會進入阻塞佇列,等前面的執行緒執行結束重新放入執行緒池後,才會繼續建立執行緒。
maxpoolsize:最大執行緒數
如果已達到核心執行緒數,佇列也滿了,就會創造新執行緒去執行任務,如果算上新執行緒數,已經到達了最大執行緒數,就會報錯,觸發拒絕策略。
keepalivetime:執行緒空閒時間
超過空閒時間,多餘的執行緒就會回到執行緒池,減少到核心執行緒數的大小,如果allowcorethreadtimeout設定為true,那麼最小可以減少到0
allowcorethreadtimeout:允許執行緒超時
看4rejectedexecutionhandler:任務拒絕處理器
主要描述的拒絕策略:
①當佇列滿了,最大執行緒數也到了,就會觸發拒絕策略。
②呼叫shutdown也會執行拒絕策略,但是會先把手頭的活幹完。
觸發拒絕策略會如何:
①預設是直接報exception
②丟棄任務,拋runtimeexception
③執行任務
④無視任務
⑤剔除佇列中最先進入佇列的任務
⑥rejectedexecutionhandler介面實現,自定義處理方法
執行緒池的執行順序:
①首先建立執行緒到核心數量
②核心數量滿了,多餘的放進阻塞佇列
③阻塞佇列滿了,但是還沒到最大執行緒數,繼續建立執行緒
④佇列滿了也達到最大執行緒數了,觸發拒絕策略
執行緒池引數設定場景
併發量大,但是任務周期短
執行緒池執行緒數可以設定為cpu核數+1,減少執行緒上下文的切換
併發不高,但是任務周期長
假如是業務時間長集中在io操作上,也就是io密集型的任務,因為io操作並不占用cpu,所以不要讓所有的cpu閒下來,可以適當加大執行緒池中的執行緒數目(2 * cpu核數),讓cpu處理更多的業務。
假如是業務時間長集中在計算操作上,也就是cpu密集型任務,執行緒數設定成cpu核數+1就好,執行緒池中的執行緒數設定得少一些,減少執行緒上下文的切換
Java併發程式設計八 執行緒池
1.降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。2.提高響應速度。當任務到達時,任務可以不需要的等到執行緒建立就能立即執行。3.提高執行緒的可管理性。執行緒是稀缺資源,如果無限制的建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一的分配,調優和監控。...
JUC(八) 執行緒池深入講解
juc 一 locks juc 二 深入理解鎖機制 juc 三 執行緒安全類 juc 四 強大的輔助類講解 juc 五 callable juc 六 阻塞佇列 juc 七 執行緒池簡單使用 juc 八 執行緒池深入講解 3 當乙個執行緒完成任務時,它會從佇列中取下乙個任務來執行。4 當乙個執行緒無事...
Dubbo(八)執行緒模型
dubbo有兩種執行緒池,第一種是i o執行緒池,第二種是業務執行緒池。i o執行緒池主要是收包發包,接收新的連線,業務執行緒則是執行我們的業務 呼叫介面的實現類 i o執行緒數預設是cpu的個數 1,業務執行緒數預設是200。與其他半同步半非同步的模型相似,dubbo的業務執行緒池也配備了佇列,不...