加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

线程池的核心参数(Java线程池原理及核心参数)

发布时间:2022-12-19 14:07:05 所属栏目:Linux 来源:网络
导读: 首先看下SDK关于线程池ThreadPoolExecutor类的构造函数源码:

图1 ThreadPoolExecutor类构造函数部分源码
一、由源码可以看出线程池有几个核心的参数概念:
1、核心线程数:corePoolSize【

首先看下SDK关于线程池ThreadPoolExecutor类的构造函数源码:

线程池的核心参数(Java线程池原理及核心参数)

图1 ThreadPoolExecutor类构造函数部分源码

一、由源码可以看出线程池有几个核心的参数概念:

1、核心线程数:corePoolSize【allowCoreThreadTimeOut为false时,线程池中要一直保留的活跃线程数线程池linux,不受空闲时间限制】;

2、最大线程数:maximumPoolSize【线程池中允许的最大的活跃线程数,达到这个值后,不再创建新的线程】;

3、活跃时间:keepAliverTime【一个空闲线程的保活时间,超过这个时间线程就会被回收销毁】;

4、活跃时间单位:unit【保活时间单位】

5、工作队列:workQueue【用于存储未被线程调用的任务,进行排队等待线程池调用】

6、线程工厂:threadFactory【用于向线程池中创建新线程】

7、拒绝策略:handler【用于处理工作队列满了之后新来的任务】

二、线程池执行流程如下:

线程池的核心参数(Java线程池原理及核心参数)

图2 线程池流程图

1、当我们提交任务给线程池,如果当前线程池的数量没有达到corePoolSize,线程池会创建新的线程来执行任务;

2、当线程数量达到corePoolSize的时候,后续任务将会进入工作队列进行排队执行,等待空闲线程来调用执行,队列未满之前,线程池中线程个数=核心线程数量;

3、当阻塞队列满了之后,那么将会继续创建(

maximumPoolSize-corePoolSize)个数量的线程来执行任务,如果任务处理完毕,

maximumPoolSize-corePoolSize额外创建的线程可等待keepAliveTime时间之后被自动回收销毁,即超过核心线程数的线程最多空闲keepAliveTime时间;

4、如果达到maximumPoolSize,阻塞队列还是满的状态,那么将根据不同的拒绝策略对应处理。

三、线程池拒绝策略

JDK提供了4种拒绝策略:

线程池的核心参数(Java线程池原理及核心参数)

图3 拒绝策略

1. AbortPolicy:直接丢弃任务,抛出异常,这是默认策略

2. CallerRunsPolicy:只用调用者所在的线程来处理任务

3. DiscardOldestPolicy:丢弃等待队列中最旧的任务,并执行当前任务

4. DiscardPolicy:直接丢弃任务,也不抛出异常

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!