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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: `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


相关文章
|
8天前
|
存储 数据可视化 Java
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
|
6天前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
6天前
|
存储 监控 安全
一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)
这篇文章是Java面试第三天的笔记,讨论了线程安全、Thread与Runnable的区别、守护线程、ThreadLocal原理及内存泄漏问题、并发并行串行的概念、并发三大特性、线程池的使用原因和解释、线程池处理流程,以及线程池中阻塞队列的作用和设计考虑。
|
1天前
|
缓存 Java
异步&线程池 线程池的七大参数 初始化线程的4种方式 【上篇】
这篇文章详细介绍了Java中线程的四种初始化方式,包括继承Thread类、实现Runnable接口、实现Callable接口与FutureTask结合使用,以及使用线程池。同时,还深入探讨了线程池的七大参数及其作用,解释了线程池的运行流程,并列举了四种常见的线程池类型。最后,阐述了在开发中使用线程池的原因,如降低资源消耗、提高响应速度和增强线程的可管理性。
异步&线程池 线程池的七大参数 初始化线程的4种方式 【上篇】
|
7天前
|
缓存 监控 Java
Java性能优化:从单线程执行到线程池管理的进阶实践
在Java开发中,随着应用规模的不断扩大和用户量的持续增长,性能优化成为了一个不可忽视的重要课题。特别是在处理大量并发请求或执行耗时任务时,单线程执行模式往往难以满足需求,这时线程池的概念便应运而生。本文将从应用场景举例出发,探讨Java线程池的使用,并通过具体案例和核心代码展示其在实际问题解决中的强大作用。
22 1
|
8天前
|
Java
Java线程池核心数为0时,线程池如何执行?
【8月更文挑战第11天】Java线程池核心数为0时,线程池如何执行?
21 1
|
4天前
|
算法 安全 Java
深入解析Java多线程:源码级别的分析与实践
深入解析Java多线程:源码级别的分析与实践
|
4天前
|
Java 编译器 数据库连接
Java中的无参数构造方法
Java中的无参数构造方法
|
8天前
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
16 0
|
8天前
|
存储 Java
【Java】Java学生成绩管理系统(源码+论文)【独一无二】
【Java】Java学生成绩管理系统(源码+论文)【独一无二】