java.util.concurrent 執行緒池的實現原理
阿新 • • 發佈:2018-12-19
ThreadPoolExecutor構造
corePoolSize:執行緒池中的執行緒數
maximumPoolSize:允許的最大執行緒數
keepAliveTime:當前執行緒的空閒時間,如果超時會自動釋放執行緒資源預設 0
TimeUnit:引數的時間單元
workQueue:用於在任務完成之前儲存它們的佇列,如果執行緒池的執行緒別佔滿,則將等待的執行緒放到此阻塞佇列中
執行過程:
1.如果執行緒池中存在的執行緒資料小於執行緒的大小,則會建立一個執行緒
2.當天執行緒池的可用執行緒數不足時,則將執行緒任務放入阻塞佇列
執行緒池的拒絕策略:
執行緒池總的阻塞佇列預設大小為Integer.MAX_VALUE
如果執行緒的的可以執行緒不足,並且阻塞佇列已經裝滿時改如何處理?
JDK為我們提供了接觸策略的介面RejectedExecutionHandler,預設的實現介面有四中:
一:AbortPolicy 當執行緒池中的可用執行緒數不足,佇列容器也裝滿時將會丟擲異常
二:DiscardOldestPolicy 會丟棄阻塞佇列中最老的一個執行緒任務
三:DiscardPolicy 不做任何處理
四:CallerRunsPolicy 在呼叫的執行緒中執行任務
除了以上四中之外,也可自己實現RejectedExecutionHandler的rejectedExecution介面來完成自定義拒絕策略