ThreadPoolExecutor的execute

public void execute(Runnable command) {
if (command == null)
throw new NullPointerException();

int c = ctl.get();
if (workerCountOf(c) < corePoolSize) {//如果小于核心线程数,那么添加一个线程,注意addworker的第二个参数是true,意思是在添加worker的时候还是要按照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))//如果添加到队列这一步失败,说明队列满了,那么在核心线程的基础上,要以最大线程数为限制,所以这个时候addworker的第二个参数是false,否则是添加不成功的。 reject(command); }

三条逻辑非常清晰

猜你喜欢

转载自www.cnblogs.com/chuliang/p/9202593.html