Java線程池的工作流程

線程池剛被創建的時候,只是向系統里申請一個用於執行流程隊列和管理線程池的線程資源。在調用execute()添加一個任務時,線程池會按照以下流程執行:

1、如果正在運行的線程數少於corePoolSize(用戶定義的核心線程數),線程池就會立刻創建線程並執行該線程任務;

2、如果正在運行的線程數大於corePoolSize,該任務就會被放入阻塞隊列中;

3、如果阻塞隊列已滿且正在運行的線程數少於maximumPoolSize時,線程池會創建非核心線程立刻執行該線程任務;

4、在阻塞隊列已滿並且正在運行的線程數大於maximunPoolSize時,線程池將會拒絕執行該任務並且拋出拒絕異常RejectExecutionException;

5、在線程執行完畢後,該任務會從線程隊列中移除,然後從隊列中取下一個任務繼續執行;

6、在線程處於空閑的時間超過keepAliveTime,並且正在運行的線程數大於corePoolSize, 該線程將會被認為是空閑線程並停止;所以線程任務都執行完畢後,線程池會收縮到corePoolSize大小。

Tags: