1. 程式人生 > 其它 >thread pool執行緒池

thread pool執行緒池

問題三:執行緒池中的執行緒是怎麼建立的?是一開始就隨著執行緒池的啟動 建立好的嗎? 顯然不是的。執行緒池預設初始化後不啟動 Worker,等待有請求時才啟 動。 每當我們呼叫 execute() 方法新增一個任務時,執行緒池會做如下判 斷:
  •   如果正在執行的執行緒數量小於 corePoolSize,那麼馬上建立執行緒執行 這個任務;
  •   如果正在執行的執行緒數量大於或等於 corePoolSize,那麼將這個任務 放入佇列;
  •   如果這時候佇列滿了,而且正在執行的執行緒數量小於 maximumPoolSize,那麼還是要建立非核心執行緒立刻執行這個任務;
  •   如果佇列滿了,而且正在執行的執行緒數量大於或等於 maximumPoolSize,那麼執行緒池會丟擲異常 RejectExecutionException。
當一個執行緒完成任務時,它會從佇列中取下一個任務來執行。 當一個 執行緒無事可做,超過一定的時間(keepAliveTime)時,執行緒池會判 斷。 如果當前執行的執行緒數大於 corePoolSize,那麼這個執行緒就被停掉。 所以執行緒池的所有任務完成後,它最終會收縮到 corePoolSize 的大 小。