Java 多線程線程池的工作流程


1.在創建了線程池后,等待提交過來的任務請求.

2.當調用execute()方法添加一個請求任務時,線程池就會做如下判斷:

  2.1 如果正在運行的線程數量小於corePoolSize,那么馬上創建線程運行這個任務

  2.2 如果正在運行的線程數量大於或等於corePoolSize,那么將這個任務放入隊列

  2.3 如果這時候隊列滿了且正在運行的線程數量還小於maximumPoolSize,那么還是要創建非核心線程立刻運行這個任務

  2.4 如果對隊列滿了且正在運行的線程數量大於或等於maximumPoolSize,那么線程池會啟動飽和拒絕策略來執行.

3.當一個線程完成任務時,它會從隊列中取下一個任務來執行.

4.當一個線程無事可做超過一定的時間(keepAliveTime)時,線程池會判斷:

  4.1 如果當前運行的線程數大於corePoolSize,那么這個線程就會被停掉

  4.2 所以線程池的所有任務完成后它最終會收縮到corePoolSize的大小

 

如圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM