java執行緒池的實現機制
一、java中提供的執行緒在開發中可能並不會直接使用,多執行緒程式設計場景使用java的執行緒池會更好,因為可以很好的管理執行緒,並且執行緒池內部的機制節省了我們自己建立和銷燬執行緒的時間,效率上來講更高。那麼執行緒池內部實現的機制是怎樣的呢?
首先看一張圖:
執行緒池內部實現機制
先解釋每個元素的含義,然後整體總結機制
1、BlockingQueue<Runnable>
這是java jdk提供的阻塞佇列,在這裡是用來存放使用者提交的任務
2、corePool
這是執行緒池中的核心執行緒,一個執行緒池中,首先使用這些核心執行緒去處理使用者遞交過來的任務
3、maximumPool
這是執行緒池中允許建立的最大的執行緒數
4、RejectedExecutionHandler
這是執行緒池提供的飽和策略,提供了四種策略,含義分別如下
AbortPolicy:直接丟擲異常,預設使用
CallerRunsPolicy:使用呼叫者的執行緒執行任務
DiscardPolicy:直接丟棄任務
DiscardOldPolicy:丟棄最老的任務
5、execute()
該方法是執行緒池提供給外部呼叫的方法,使用者可通過呼叫該方法實現將任務交給執行緒池去執行
搞明白以上內容的所有含義,下面分四步整體說明執行緒池的執行流程和機制:
1、當外部的任務數提交到執行緒池中,任務數小於執行緒池的核心執行緒數的時候,就建立核心執行緒去執行任務
2、當任務數大於等於核心執行緒數的時候,將任務存入阻塞佇列
3、當阻塞佇列也已經存滿了,則去建立新的執行緒來執行任務,但建立的新的執行緒數量不超過執行緒池的最大執行緒數
4、如果任務佇列滿了,執行緒池的執行緒也達到了最大執行緒數,此時還有新的任務遞交到執行緒池怎麼辦?
5、使用飽和策略,具體使用哪種策略根據任務來確定,執行緒池預設是直接丟擲異常
以上就是執行緒池內部的具體實現機制。