1. 程式人生 > >java.util.concurrent 執行緒池的實現原理

java.util.concurrent 執行緒池的實現原理

ThreadPoolExecutor構造

corePoolSize:執行緒池中的執行緒數

maximumPoolSize:允許的最大執行緒數

keepAliveTime:當前執行緒的空閒時間,如果超時會自動釋放執行緒資源預設 0

TimeUnit:引數的時間單元

workQueue:用於在任務完成之前儲存它們的佇列,如果執行緒池的執行緒別佔滿,則將等待的執行緒放到此阻塞佇列中

執行過程:

1.如果執行緒池中存在的執行緒資料小於執行緒的大小,則會建立一個執行緒

2.當天執行緒池的可用執行緒數不足時,則將執行緒任務放入阻塞佇列

執行緒池的拒絕策略:

執行緒池總的阻塞佇列預設大小為Integer.MAX_VALUE

如果執行緒的的可以執行緒不足,並且阻塞佇列已經裝滿時改如何處理?

JDK為我們提供了接觸策略的介面RejectedExecutionHandler,預設的實現介面有四中:

一:AbortPolicy 當執行緒池中的可用執行緒數不足,佇列容器也裝滿時將會丟擲異常

二:DiscardOldestPolicy 會丟棄阻塞佇列中最老的一個執行緒任務

三:DiscardPolicy 不做任何處理

四:CallerRunsPolicy 在呼叫的執行緒中執行任務

除了以上四中之外,也可自己實現RejectedExecutionHandler的rejectedExecution介面來完成自定義拒絕策略