Java 執行緒池工作過程
阿新 • • 發佈:2022-03-31
1. 執行緒池剛建立時,裡面沒有一個執行緒。任務佇列是作為引數傳進來的。
不過,就算佇列裡面有任務,執行緒池也不會馬上執行它們。
2. 當呼叫 execute() 方法新增一個任務時,執行緒池會做如下判斷:
a) 如果正在執行的執行緒數量小於 corePoolSize,那麼馬上建立執行緒執行這個任務;
b) 如果正在執行的執行緒數量大於或等於 corePoolSize,那麼將這個任務放入佇列;
c) 如果這時候佇列滿了,而且正在執行的執行緒數量小於 maximumPoolSize,那麼還是要
建立非核心執行緒立刻執行這個任務;
d) 如果佇列滿了,而且正在執行的執行緒數量大於或等於 maximumPoolSize,那麼執行緒池
會丟擲異常 RejectExecutionException。
3. 當一個執行緒完成任務時,它會從佇列中取下一個任務來執行。
4. 當一個執行緒無事可做,超過一定的時間(keepAliveTime)時,執行緒池會判斷,如果當前運
行的執行緒數大於 corePoolSize,那麼這個執行緒就被停掉。所以執行緒池的所有任務完成後,它
最終會收縮到 corePoolSize 的大小。