降低資源消耗
提高響應速度 t1: 執行緒建立的時間 t2:工作任務執行額時間 t3: 執行緒銷毀時間
提高了執行緒的可管理性
corepoolsize: 核心執行緒數;如果執行的執行緒數大於核心執行緒數, 則會先進入到阻塞佇列裡
maxinumpoolsize:允許最大執行緒數; 執行緒池所建立的執行緒數一定小於這個值
keepalivetime:空閒執行緒所存活的時間
timeunit:keepalivetime 的時間單位
workqueue: 阻塞佇列
threadfactory:執行緒工廠,給每個新建的執行緒命名, 預設的執行緒命名規則:pool數字+thread 數字
rejectedexectionhandler:飽和策略。 阻塞隊滿了, 沒有空閒執行緒時的處理方法
1.abortpolicy:直接丟擲異常 預設
2.callerrunspolicy: 呼叫者所在的執行緒來執行任務
3.discardoldestpolicy:丟棄最老的任務
4.discardpolicy:直接丟棄的任務
都不滿足時, 可以使用rejectexecutionhandler介面自定義保護和策略
執行緒池的使用:
核心執行緒數是2 , 滿了之後, 又啟動了2 個執行緒(因為最大執行緒數是4), 雖然最終是6 個任務, 但是只啟動了4 個執行緒來執行
有6 個任務只建立乙個執行緒來執行
有6 個任務, 就建立了6 個執行緒
delay: 提交任務過多久之後才執行
scheduleatfixedrate:固定時間間隔 迴圈執行
時間間隔60s
任務a 執行需要80s, 任務b 執行需要20 s, 任務c 執行需要50s
則a 執行的時間是, 0 -80s
b 執行的時間是: 81-100s(到100s 的時候已經執行完了, 但是時間間隔還有60-20=40s)
c 的執行時間是 140-190(還有60-50 的間隔時間)
任務d 再執行則是 200 開始
schedulewithfixeddelay:固定延時間隔的迴圈執行
時間間隔是 60s
任務a 執行需要80s, 任務b 執行需要20 s, 任務c 執行需要50s
則a 執行的時間是, 0 -80s
b執行的時間是:(80+60)=140——160
c執行的時間是:(160+60)=220——270
任務d 再執行則是 270+60=230 開始
如果報異常, 我們處理了異常, 下個任務會繼續執行, 如果沒有則中斷定時任務的機制
當有任務需要執行時, 執行緒池先建立執行緒,放到核心執行緒裡。 如果建立的執行緒數達到核心執行緒數 , 則將任務推薦阻塞佇列, 如果阻塞佇列也滿了, 執行緒池繼續建立執行緒來還行任務, 知道執行緒數達到最大執行緒。 如果最大執行緒數滿了, 佇列也滿了, 進入飽和策略
Java 執行緒池併發程式設計詳解
本博文分為6個部分 1.bizprocessor 具體的事務處理邏輯,被多執行緒呼叫。2.bizasynctaskcall 實現callable介面,用於組裝futuretask。3.bizfuturetask 代表乙個非同步計算任務,用於提交任務非同步執行,並返回計算結果。4.bizexecuto...
Java併發程式設計 執行緒池 例項
public class test executor.shutdown while true try catch interruptedexception e public void testrun threadpoolexecutor executor,final int a catch inte...
java併發程式設計學習11 執行緒池
執行緒池 為了節省系統在多執行緒併發時不斷建立和銷毀執行緒帶來的額外開銷,就需要引入執行緒池。執行緒池的基本功能就是進行執行緒的復用。當系統接受一 個提交的任務時,並不會著急去建立乙個新的執行緒去執行這個任務,而是去執行緒池中查詢是否有空閒的執行緒。若有 直接使用這個執行緒。若沒有 根據配置的策略執...