執行緒池核心流程和邏輯

2021-10-02 05:44:45 字數 994 閱讀 6444

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 ...