原始碼解析執行緒池的執行流程

2021-09-21 14:23:43 字數 1540 閱讀 2805

任務被提交到執行緒池,會先判斷當前執行緒數量是否小於corepoolsize,如果小於則建立執行緒來執行提交的任務,否則將任務放入workqueue佇列,如果workqueue滿了,則判斷當前執行緒數量是否小於maximumpoolsize,如果小於則建立執行緒執行任務,否則就會呼叫handler拒絕策略,以表示執行緒池拒絕接收任務

使用者提交執行緒的方式有兩種:submit()和execute()。

public future<

?>

submit

(runnable task)

public

future

submit

(runnable task, t result)

public

future

submit

(callable

task)

public

void

execute

(runnable command)

//如果當前工作的執行緒數》corepoolsize

//執行緒池處於running狀態,並且將任務新增到workqueue佇列。if(

isrunning

(c)&& workqueue.

offer

(command)

)//如果放入workqueue失敗,則建立執行緒執行任務,

//如果這時建立執行緒失敗(當前執行緒數》maximumpoolsize時),

//就會呼叫reject拒絕策略(內部呼叫handler)拒絕接受任務

elseif(

!addworker

(command,

false))

reject

(command)

;}

private

boolean

addworker

(runnable firsttask,

boolean core)

}boolean workerstarted =

false

;//worker是否啟動

boolean workeradded =

false

;//是否新增成功

worker w = null;

try}

finally

if(workeradded)}}

finally

return workerstarted;

}

private

void

addworke***iled

(worker w)

finally

}

mysql 執行緒池原始碼 執行緒池原始碼解析

1.前言 我個人覺得理論性的東西可能大家都懂,但是具體的實現細節可能並不是很清楚所以才想記錄一下,加深記憶。2.關鍵原始碼解析 1 ctl private final atomicinteger ctl new atomicinteger ctlof running,0 private static...

執行緒池提交任務和執行任務原始碼解析(2)

因為篇幅太長所以分兩篇部落格進行說明,本文算是對 執行緒池提交任務和執行任務原始碼解析 的補充 第一篇部落格 執行緒池提交任務和執行任務原始碼解析 繼續execute 方法的說明 public void execute runnable command 執行緒池提交任務和執行任務原始碼解析 分析到這...

併發程式設計的藝術 執行緒池原始碼解析

執行緒池的作用 1,降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。2,提搞響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。3,提高系統的客觀理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配,調...