1.new乙個執行緒池,執行緒池7個引數含義:
public threadpoolexecutor(int corepoolsize,//核心池大小
int maximumpoolsize,//最大執行緒數
long keepalivetime,//空閒時間,大於空閒時間的執行緒銷毀
timeunit unit,//時間單位
blockingqueueworkqueue,//阻塞佇列,執行緒數到達核心池大小來新的任務放到這個佇列
threadfactory threadfactory,//執行緒工廠
rejectedexecutionhandler handler) //拒絕策略
2.呼叫execute方法,只列出核心邏輯
1)如果執行緒數少於corepoolsize,新建worker
if (workercountof(c) < corepoolsize)
所以2-4步驟裡worker裡的執行緒啟動後會呼叫worker的run方法
2)worker的run方法
public void run()
3)runworker(this)方法核心
runnable task = w.firsttask;
while (task != null || (task = gettask()) != null) //gettask()是從佇列裡取任務,這裡是乙個死迴圈,一直從佇列裡拿任務
task.run();//執行task的方法,即執行緒池要執行的真正的任務
4.gettask()方法
該方法中會判斷是否該給執行緒乙個任務
2.worker等待超時了
如果不給任務,執行緒則銷毀
以上只是執行緒池的核心邏輯,還有很多邏輯可以以後繼續**,比如執行緒拋異常中止了怎麼辦,執行緒池關閉了怎麼辦等
執行緒池的核心執行緒
1 執行緒池的核心執行緒是可以重複利用的 2 當有新任務來的時候,先看看當前的執行緒數有沒有超過核心執行緒數,如果沒超過就直接新建乙個執行緒 核心執行緒 來執行新的任務,如果超過了就看看快取佇列有沒有滿,沒滿就將新任務放進快取佇列中,滿了就新建乙個執行緒 非核心執行緒 來執行新的任務,如果執行緒池中...
執行緒池 引數和工作流程
threadpoolexecutor建構函式如下 corepoolsize 指的是核心執行緒數,執行緒池初始化時執行緒數預設為 0,當有新的任務提交後,會建立新執行緒執行任務,如果不做特殊設定,此後執行緒數通常不會再小於 corepoolsize 因為它們是核心執行緒,即便未來可能沒有可執行的任務也...
執行緒池及核心引數
一般來說,執行緒的生命週期需要通過 new 新建 start 就緒 running 執行中 dead 消亡 假設每個狀態到下乙個狀態需要的時間是 1,2,3 秒 但是我們往往只是關心running 那個狀態就可以了,這是執行緒需要執行的任務 使用執行緒池,建立一定數量的執行緒,專門執行任務的run ...