1. 程式人生 > >java執行緒池的實現機制

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、使用飽和策略,具體使用哪種策略根據任務來確定,執行緒池預設是直接丟擲異常

    以上就是執行緒池內部的具體實現機制。