1. 程式人生 > 其它 >Java 執行緒池工作過程

Java 執行緒池工作過程

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