1. 程式人生 > >執行緒的理解(總結)

執行緒的理解(總結)

首先,執行緒池通過execute()方法執行某個任務(task),執行緒池收到這個任務後,


如果當前執行緒池中的執行緒數 < corePoolSize,無論之前已經建立的執行緒是否處於空閒狀態,執行緒池會建立一個新的執行緒執行這個任務
如果當前執行緒池中的執行緒數 > = corePoolSize,執行緒池會把這個任務新增到等待佇列(runnableTaskQueue)中。如果某一個執行緒空閒了,執行緒池根據規則從等待佇列中取出一個任務執行。
如果當前執行緒池中的執行緒數 > corePoolSize, 並且等待佇列已經滿員,無法再加入新的任務,這時,執行緒池會建立一個非核心執行緒執行這個任務。
如果當前執行緒池中的執行緒數 = maximumPoolSize,新加入的這個任務會導致執行緒池丟擲一個RejectedExecutionException異常,即執行緒池拒絕接收這個任務。
一旦執行緒池中某個執行緒完成了這個任務,它會去等待佇列中拿下一個等待任務。


當執行緒池中的執行緒數 > corePoolSize,說明當前執行緒池中有非核心執行緒。當某個執行緒處理完執行緒後,等待keepAliveTime時間後仍然沒有新的任務分配給它,這個執行緒將會被回收。直到執行緒數 = corePoolSize時,回收停止。