①首先會判斷核心線程池里是否有線程可執行,有空閑線程則創建一個線程來執行任務。
②當核心線程池里已經沒有線程可執行的時候,此時將任務丟到任務隊列中去。
③如果任務隊列(有界)也已經滿了的話,但運行的線程數小於最大線程池的數量的時候,此時將會新建一個線程用於執行任務,但如果運行的線程數已經達到最大線程池的數量的時候,此時將無法創建線程執行任務。
所以實際上對於線程池不僅是單純地將任務丟到線程池,線程池中有線程就執行任務,沒線程就等待。
另一種流程解釋::::
step1.調用ThreadPoolExecutor的execute提交線程,首先檢查CorePool,如果CorePool內的線程小於CorePoolSize,新創建線程執行任務。
step2.如果當前CorePool內的線程大於等於CorePoolSize,那么將線程加入到BlockingQueue。
step3.如果不能加入BlockingQueue,在小於MaxPoolSize的情況下創建線程執行任務。
step4.如果線程數大於等於MaxPoolSize,那么執行拒絕策略。
step2.如果當前CorePool內的線程大於等於CorePoolSize,那么將線程加入到BlockingQueue。
step3.如果不能加入BlockingQueue,在小於MaxPoolSize的情況下創建線程執行任務。
step4.如果線程數大於等於MaxPoolSize,那么執行拒絕策略。