執行緒池工作流程

2021-09-19 13:18:02 字數 1201 閱讀 9065

工作流程

執行緒池剛建立時,裡面沒有乙個執行緒。任務佇列是作為引數傳進來的。不過,就算佇列裡面有任務,執行緒池也不會馬上執行它們。

當呼叫 execute() 方法新增乙個任務時,執行緒池會做如下判斷

1、如果正在執行的執行緒數量小於 corepoolsize,那麼馬上建立執行緒執行這個任務

2、如果正在執行的執行緒數量大於或等於 corepoolsize,那麼將這個任務放入佇列

3、如果這時候佇列滿了,而且正在執行的執行緒數量小於 maximumpoolsize,那麼還是要建立非核心執行緒立刻執行這個任務

4、如果佇列滿了,而且正在執行的執行緒數量大於或等於 maximumpoolsize,那麼執行緒池會丟擲異常rejectexecutionexception

當乙個執行緒完成任務時,它會從佇列中取下乙個任務來執行。

當乙個執行緒無事可做,超過一定的時間(keepalivetime)時,執行緒池會判斷,如果當前執行的執行緒數大於 corepoolsize,那麼這個執行緒就被停掉。所以執行緒池的所有任務完成後,它最終會收縮到 corepoolsize 的大小。

引數解釋

int corepoolsize

int maximumpoolsize

該執行緒池中線程總數最大值執行緒總數 = 核心執行緒數 + 非核心執行緒數。

long keepalivetime

該執行緒池中非核心執行緒閒置超時時長。乙個非核心執行緒,如果不幹活(閒置狀態)的時長超過這個引數所設定的時長,就會被銷毀掉。

timeunit unit

keepalivetime的單位,timeunit是乙個列舉型別

blockingqueue workqueue

該執行緒池中的任務佇列。維護著等待執行的runnable物件當所有的核心執行緒都在幹活時,新新增的任務會被新增到這個佇列中等待處理,如果佇列滿了,則新建非核心執行緒執行任務。

參見:理解執行緒池的原理

參見:執行緒池,這一篇或許就夠了

執行緒池 引數和工作流程

threadpoolexecutor建構函式如下 corepoolsize 指的是核心執行緒數,執行緒池初始化時執行緒數預設為 0,當有新的任務提交後,會建立新執行緒執行任務,如果不做特殊設定,此後執行緒數通常不會再小於 corepoolsize 因為它們是核心執行緒,即便未來可能沒有可執行的任務也...

jdk1 8執行緒池 基於原始碼了解工作流程

構造方法 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueue workqueue,threadfactory threadfacto...

執行緒和程序的工作流程

首先來一句概括的總論 程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述。下面細說背景 cpu ram 各種資源 比如顯示卡,光碟機,鍵盤,gps,等等外設 構成我們的電腦,但是電腦的執行,實際就是cpu和相關暫存器以及ram之間的事情。乙個最最基礎的事實 cpu太快,太快,太快了,暫存器僅...