ThreadPoolExecutor 线程池相关介绍
作者:互联网
目录
一、介绍
线程池我们在工作中经常会用到。在请求量大时,使用线程池,可以充分利用机器资源,增加请求的处理速度。
1.1> 为什么要用线程池
- 使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务;
- 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约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