任务command提交到ThreadPoolExecutor,经历核心线程数、队列容量和最大线程数的判断,小于线程数(核心线程数/最大线程数)创建线程并将任务交给线程执行,小于队列容量则加入队列,满足其中一条执行后return否则执行拒绝策略。(略去一些线程运行状态的检查)
附源码片段:
public void execute(Runnable command) {
int c = ctl.get();
//step1:核心线程数判断
if (workerCountOf(c) < corePoolSize) {
if (addWorker(command, true))
return;
c = ctl.get();
} //step2:队列容量判断
if (isRunning(c) && workQueue.offer(command)) {
int recheck = ctl.get();
if (! isRunning(recheck) && remove(command))
reject(command);
else if (workerCountOf(recheck) == 0)
addWorker(null, false);
}
//step3:最大线程数判断
else if (!addWorker(command, false))
//step4:执行拒绝策略
reject(command);
}