1.在創建了線程池后,等待提交過來的任務請求.
2.當調用execute()方法添加一個請求任務時,線程池就會做如下判斷:
2.1 如果正在運行的線程數量小於corePoolSize,那么馬上創建線程運行這個任務
2.2 如果正在運行的線程數量大於或等於corePoolSize,那么將這個任務放入隊列
2.3 如果這時候隊列滿了且正在運行的線程數量還小於maximumPoolSize,那么還是要創建非核心線程立刻運行這個任務
2.4 如果對隊列滿了且正在運行的線程數量大於或等於maximumPoolSize,那么線程池會啟動飽和拒絕策略來執行.
3.當一個線程完成任務時,它會從隊列中取下一個任務來執行.
4.當一個線程無事可做超過一定的時間(keepAliveTime)時,線程池會判斷:
4.1 如果當前運行的線程數大於corePoolSize,那么這個線程就會被停掉
4.2 所以線程池的所有任務完成后它最終會收縮到corePoolSize的大小
如圖所示: