任務被提交到執行緒池,會先判斷當前執行緒數量是否小於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,提高系統的客觀理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配,調...