[Java] 纯文本查看 复制代码
public void execute(Runnable command) {
if (command == null)
throw new NullPointerException();
int c = ctl.get();
//当前线程池中线程比核心线程数少,新建线程执行任务
if (workerCountOf(c) < corePoolSize) {
if (addWorker(command, true))
return;
c = ctl.get();
}
//当前线程池中核心线程池已满,但是任务队列未满,则添加到队列中
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);
}
//当前线程池中核心线程池已满,队列已满,试着创建一个新线程
else if (!addWorker(command, false))
//创建线程失败,说明线程池关闭或者完全满了,拒绝任务
reject(command);
}