Java线程池ThreadPoolExcutor源码解读详解01-参数说明

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: `ThreadPoolExecutor`是Java中用于创建线程池的类,其构造函数包含核心线程数`corePoolSize`、最大线程数`maximumPoolSize`、空闲线程存活时间`keepAliveTime`、时间单位`unit`、工作队列`workQueue`、线程工厂`threadFactory`和拒绝策略`handler`等参数。`corePoolSize`是始终保持的线程数,除非设置`allowCoreThreadTimeOut`。当线程数超过核心线程数时,新任务会放入工作队列,直到队列满且线程数未达到`maximumPoolSize`,才会创建新线程处理。

一、ThreadPoolExcutor创建线程池构造器:

 

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
        ...
    }

image.gif

二、参数说明

2.1 corePoolSize

原注释: corePoolSize the number of threads to keep in the pool, even if they are idle, unless {@code allowCoreThreadTimeOut} is set

image.gif

1. 在线程池中保留的线程数,即使它们是空闲的,除非设计了allowCoreThreadTimeOut。
    当设置了allowCoreThreadTimeOut为true时(默认是false),线程池中corePoolSize线程空闲时间达到keepAliveTime时将关闭
2. 当线程数<corePoolSize时,即使此时线程池中存在空闲线程,新提交任务将创建一个新线程执行任务。
3. 当线程数>=corePoolSize时,则新任务放入workQueue中。
4. 当workQueue已满,且maximumPoolSize > corePoolSize时,创建新线程执行新任务
5. 当提交任务数=maximumPoolSize时,新任务将被拒绝,并由RejectedExecutionHandler处理
6. 当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时关闭

image.gif

2.2 maximumPoolSize

原注释:the maximum number of threads to allow in the pool.
线程池中允许创建的最大线程数

image.gif

2.3 keepAliveTime

原注释:when the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating.
当线程数大于核心时,这是多余空闲线程在终止前等待新任务的最大时间。
如果将参数allowcorethreadtimeout=true,则这个线程的最大生命周期设置的超时时间也会作用于核心线程

image.gif

2.4 unit

原注释:the time unit for the {@code keepAliveTime} argument
keepAliveTime的时间单位,是一个枚举类型
    NANOSECONDS : 1微毫秒 = 1微秒 / 1000
    MICROSECONDS : 1微秒 = 1毫秒 / 1000
    MILLISECONDS : 1毫秒 = 1秒 /1000
    SECONDS : 秒
    MINUTES : 分
    HOURS : 小时
    DAYS : 天

image.gif

2.5 workQueue

原注释: the queue to use for holding tasks before they are executed.  This queue will hold only the {@code Runnable} tasks submitted by the {@code execute} method.
线程阻塞队列,当核心线程均在工作时,新任务将放进阻塞队列中。

image.gif

2.6 threadFactory

原注释: the factory to use when the executor creates a new thread
线程池创建新线程的工厂

image.gif

2.7 handler

原注释: the handler to use when execution is blocked because the thread bounds and queue capacities are reached
拒绝任务处理器(拒绝策略),四种策略:
    AbortPolicy: 默认策略,不执行此任务,而是直接抛出一个运行时异常
    CallerRunsPolicy: 任务被拒绝添加后,会再次调用execute(submit)来执行被拒绝的任务
    DiscardOldestPolicy: workQueue中抛弃head的一个任务,再次execute此任务
    DiscardPolicy: 直接抛弃,任务不执行

image.gif


相关文章
|
3天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【5月更文挑战第18天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,应用场景,以及如何优化线程池的性能。通过实例分析,我们将看到线程池如何提高系统性能,减少资源消耗,并提高系统的响应速度。
13 5
|
3天前
|
监控 安全 NoSQL
采用java+springboot+vue.js+uniapp开发的一整套云MES系统源码 MES制造管理系统源码
MES系统是一套具备实时管理能力,建立一个全面的、集成的、稳定的制造物流质量控制体系;对生产线、工艺、人员、品质、效率等多方位的监控、分析、改进,满足精细化、透明化、自动化、实时化、数据化、一体化管理,实现企业柔性化制造管理。
24 3
|
3天前
|
存储 Java
【Java】实现一个简单的线程池
,如果被消耗完了就说明在规定时间内获取不到任务,直接return结束线程。
11 0
|
4天前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
|
4天前
|
数据采集 监控 安全
java数字工厂MES系统全套源码Java+idea+springboot专业为企业提供智能制造MES解决方案
"MES" 指的是制造执行系统(Manufacturing Execution System)。MES在制造业中扮演着至关重要的角色,它是位于企业资源计划(ERP)系统和车间控制系统之间的系统,用于实时收集、管理、分析和报告与制造过程相关的数据。
11 0
|
4天前
|
移动开发 监控 供应链
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
一开始接触MES系统,很多人会和博主一样,对MES细节的应用不了解,这样很正常,因为MES系统相对于其他系统来讲应用比较多!
16 1
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
|
4天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
5天前
|
存储 运维 Java
java云his系统源码一站式诊所SaaS系统Java版云HIS系统 八大特点
HIS系统采用面向技术架构的分析与设计方法,应用多层次应用体系架构设计,运用基于构件技术的系统搭建模式与基于组件模式的系统内核结构。通过建立统一接口标准,实现数据交换和集成共享,通过统一身份认证和授权控制,实现业务集成、界面集成。
29 1
|
5天前
|
Java Kotlin
关于Java:public函数公开其public / * package * /’参数类型
关于Java:public函数公开其public / * package * /’参数类型
10 3
|
6天前
|
Java 关系型数据库 MySQL
java+B/S架构医院绩效考核管理系统源码 医院绩效管理系统4大特点
医院绩效考核管理系统,采用多维度综合绩效考核的形式,针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求,对考核方案中各维度进行灵活配置,对各维度的权重、衡量标准、数据统计方式进行自定义维护。
13 0