其他分享
首页 > 其他分享> > ThreadPoolExecutor 线程池相关介绍

ThreadPoolExecutor 线程池相关介绍

作者:互联网

目录

一、介绍

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

1.1> 为什么要用线程池

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

1.2> 线程池工作流程

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

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

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

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

1.3> 线程池的代码用例

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

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

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

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

2.2> Executors提供的线程池模板

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

2.3> 拒绝策略的实现

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

2.4> 任务队列BlockingQueue的实现

在这里插入图片描述

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