線程池的作用:
- 降低資源消耗速度;重複利用已創建的線程降低線程創建和銷燬造成的消耗。
- 提高響應速度;任務不需要等待線程創建就能立即執行;
- 提高線程的可管理性;
線程池實現原理:
- 線程池判斷核心線程池裏的線程是否都在執行任務。如果不是,則創建一個新的工作線程來執行任務。如果核心線程池裏的線程都在執行任務,則進入下個流程;
- 線程池判斷工作隊列是否滿。如果工作隊列沒有滿,則將新提交的任務存儲在這個工作隊列裏。如果滿,則進入下個流程;
- 線程池判斷線程池的線程是否都處於工作狀態。如果沒有,則創建一個新的工作線程來執行任務。如果滿了,則交給飽和策略來執行這個任務;
源碼:
public
void
execute(Runnable command) {
if
(command ==
null
)
throw
new
NullPointerException();
if
(poolSize >= corePoolSize || !addIfUnderCorePoolSize(command)) {
if
(runState == RUNNING && workQueue.offer(command)) {
if
(runState != RUNNING || poolSize ==
0
)
ensureQueuedTaskHandled(command);
}
else
if
(!addIfUnderMaximumPoolSize(command))
reject(command);
// is shutdown or saturated
}
}
借鑑於:http://www.cnblogs.com/dolphin0520/p/3932921.html