线程池执行流程

时间:2021-03-02 11:49:07   收藏:0   阅读:0

ThreadPoolExecutor介绍

通过 ThreadPoolExecutor 创建线程池,API 如下所示:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue); 

先来解释下其中的参数含义(如果看的比较模糊可以大致有个印象,后面的图是关键)。

上面这些参数是如何配合工作的呢?请看下图:

技术图片

注意图上面的序号。

简单总结下线程池之间的参数协作分为以下几步:

  1. 线程优先向 CorePool 中提交;
  2. 在 Corepool 满了之后,线程被提交到任务队列,等待线程池空闲;
  3. 在任务队列满了之后 corePool 还没有空闲,那么任务将被提交到 maxPool 中,如果 MaxPool 满了之后执行 task 拒绝策略。

线程数如何设置

其实这里主要是考察你对线程任务的理解和对系统设置时资源消耗的考虑了。因为为了保证系统的稳定性的同时,又需要尽可能地资源利用最大化,提高系统性能。这就需要考虑对线程数设置的计算调整。一般来说,线程数大小设置遵循如下规则:

最佳线程数目 =(( 线程等待时间 + 线程 CPU 时间 )/线程 CPU 时间 )* CPU 数目

但是其实这个公式也就是个参考值,一般我们通过这个计算出大体的最佳线程数,然后通过压测再做对应的调整以找到真实的最佳线程数大小。

本文由猿必过 YBG 发布
禁止未经授权转载,违者依法追究相关法律责任
如需授权可联系:zhuyunhui@yuanbiguo.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!