ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ThreadPoolExecutor 线程池相关介绍

2022-02-04 19:03:09  阅读:201  来源: 互联网

标签:Executors 队列 介绍 池中 任务 线程 ThreadPoolExecutor 构造函数


目录

一、介绍

线程池我们在工作中经常会用到。在请求量大时,使用线程池,可以充分利用机器资源,增加请求的处理速度。

1.1> 为什么要用线程池

  1. 使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务;
  2. 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。

1.2> 线程池工作流程

线程池的工作原理大致分为4步,如下图所示:在这里插入图片描述
首先,当有任务要执行的时候,会「计算线程池中存在的线程数量与核心线程数量(corePoolSize)进行比较」,如果小于,则在线程池中创建线程,否则,进行下一步判断。

其次,如果不满足上面的条件,则会将任务添加到「阻塞队列(BlockingQueue)」中。等待线程池中的线程空闲下来后,获取队列中的任务进行执行。

第三,如果队列中也塞满了任务,那么会计算「线程池中存在的线程数量与最大线程数量(maxnumPoolSize)进行比较」,如果小于,则在线程池中创建线程。

最后,如果上面都不满足,则会执行对应的「拒绝策略」。

1.3> 线程池的代码用例

在这里插入图片描述
在这里插入图片描述

二、源码解析——构造函数

2.1> 线程池的构造函数及类的继承关系

在这里插入图片描述
构造函数
在这里插入图片描述
「解释」

  • corePoolSize:核心线程数。
  • maximumPoolSize:最大线程数。
  • keepAliveTime:线程池中线程的最大闲置生命周期。
  • unit:针对keepAliveTime的时间单位。
  • workQueue:阻塞队列。
  • threadFactory:创建线程的线程工厂。
  • handler:拒绝策略。

2.2> Executors提供的线程池模板

在Executors中,已经给我们提供了很多种线程池的实现。如下图所示:
在这里插入图片描述

2.3> 拒绝策略的实现

线程池中提供了如下拒绝策略:
在这里插入图片描述

2.4> 任务队列BlockingQueue的实现

在这里插入图片描述

标签:Executors,队列,介绍,池中,任务,线程,ThreadPoolExecutor,构造函数
来源: https://blog.csdn.net/weixin_44129618/article/details/122782133

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有