Java线程池ThreadPoolExecutor实现原理(2)

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); }

判断command是否为空

获取线程状态

计算线程池中的线程数量,如果数量小于corePoolSize,就创建一个新线程执行任务

如果线程池正在运行状态,且写入队列成功。

再次获取线程池状态。判断,如果线程状态变成了非运行状态,就从队列中移除任务,调用reject()方法执行饱和策略handler

如果线程池为空,就创建一个新线程执行任务

如果第4步判断没有通过,尝试建立线程执行任务,若没有成功,就执行饱和策略handler

  以一张简单的流程图描述上面的步骤:

  

Java线程池ThreadPoolExecutor实现原理

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0e05e02d0d2cf11e6d5b9048d5c6c184.html