iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中ThreadPoolExecutor类的详细讲解
  • 249
分享到

Java中ThreadPoolExecutor类的详细讲解

2023-06-20 19:06:56 249人浏览 泡泡鱼
摘要

这篇文章主要介绍“Java中ThreadPoolExecutor类的详细讲解”,在日常操作中,相信很多人在Java中ThreadPoolExecutor类的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答

这篇文章主要介绍“Java中ThreadPoolExecutor类的详细讲解”,在日常操作中,相信很多人在Java中ThreadPoolExecutor类的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中ThreadPoolExecutor类的详细讲解”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

ThreadPoolExecutor

ThreadPoolExecutor是线程池框架的一个核心类,线程池通过线程复用机制,并对线程进行统一管理

  • 降低系统资源消耗。通过复用已存在的线程,降低线程创建和销毁造成的消耗;

  • 提高响应速度。当有任务到达时,无需等待新线程的创建便能立即执行;

  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗大量系统资源,还会降低系统的稳 定性,使用线程池可以进行对线程进行统一的分配、调优和监控

线程池的运行状态总共有5种,其值和含义分别如下:

  • RUNNING: 高3位为111,接受新任务并处理阻塞队列中的任务

  • SHUTDOWN: 高3位为000,不接受新任务但会处理阻塞队列中的任务

  • STOP:高3位为001,不会接受新任务,也不会处理阻塞队列中的任务,并且中断正在运行的任务

  • TIDYING: 高3位为010,所有任务都已终止,工作线程数量为0,线程池将转化到TIDYING状态,即将要执行 terminated()结束钩子方法

  • TERMINATED: 高3位为011,terminated()方法已经执行结束

构造器中各个参数的含义:

1.corePoolSize
线程池中的核心线程数。当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于 corePoolSize;如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行。

2.maximumPoolSize
线程池中允许的大线程数。如果当前阻塞队列满了,且继续提交任务,则创建新的线程执行任务,前提是当前线 程数小于maximumPoolSize。

3.keepAliveTime

线程空闲时的存活时间。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作 用,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。但是 如果调用了allowCoreThreadTimeOut(boolean)方法,keepAliveTime参数也会起作用,直到线程池中的线程数为 0。

4.unit
keepAliveTime参数的时间单位。

5.workQueue
任务缓存队列,用来存放等待执行的任务。如果当前线程数为corePoolSize,继续提交的任务就会被保存到任务缓 存队列中,等待被执行。
一般来说,这里的BlockingQueue有以下三种选择:
SynchronousQueue:一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则 插入操作一直处于阻塞状态。因此,如果线程池中始终没有空闲线程(任务提交的平均速度快于被处理的速 度),可能出现无限制的线程增长。 LinkedBlockingQueue:基于链表结构的阻塞队列,如果不设置初始化容量,其容量Integer.MAX_VALUE, 即为无界队列。因此,如果线程池中线程数达到了corePoolSize,且始终没有空闲线程(任务提交的平均速度 快于被处理的速度),任务缓存队列可能出现无限制的增长。 ArrayBlockingQueue:基于数组结构的有界阻塞队列,按FIFO排序任务。

6.threadFactory
线程工厂,创建新线程时使用的线程工厂。

7.handler
任务拒绝策略,当阻塞队列满了,且线程池中的线程数达到maximumPoolSize,如果继续提交任务,就会采取任 务拒绝策略处理该任务,线程池提供了4种任务拒绝策略:

  • AbortPolicy:丢弃任务并抛出RejectedExecutionException异常,默认策略;

  • CallerRunsPolicy:由调用execute方法的线程执行该任务;

  • DiscardPolicy:丢弃任务,但是不抛出异常;

  • DiscardOldestPolicy:丢弃阻塞队列前面的任务,然后重新尝试执行任务(重复此过程)。

  • 当然也可以根据应用场景实现RejectedExecutionHandler接口自定义饱和策略,如记录日志或持久化存储不能处 理的任务。

到此,关于“Java中ThreadPoolExecutor类的详细讲解”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java中ThreadPoolExecutor类的详细讲解

本文链接: https://www.lsjlt.com/news/299336.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中ThreadPoolExecutor类的详细讲解
    这篇文章主要介绍“Java中ThreadPoolExecutor类的详细讲解”,在日常操作中,相信很多人在Java中ThreadPoolExecutor类的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
  • ThreadPoolExecutor中的submit()方法详细讲解
    目录submmit()参数解析submit()的返回值FutureFutureTask的get()的实现submit()使用案例在使用线程池的时候,发现除了execute()方法可以...
    99+
    2022-11-13
  • Java之ThreadPoolExecutor类详解
    ThreadPoolExecutor ThreadPoolExecutor是线程池框架的一个核心类,线程池通过线程复用机制,并对线程进行统一管理 降低系统资源消耗。通过复用...
    99+
    2022-11-12
  • Java 抽象类详细讲解
    目录 Java抽象类概念 Java抽象类示例 继承Animal类的子类的示例 Java抽象类详细使用方法 1、定义抽象类 2、继承抽象类 3、实现抽象方法 4、完整示例代码 Java抽象类概念 Java中抽象类是指用abstract关键...
    99+
    2023-09-04
    java jvm 开发语言 javase 面向对象
  • Java超详细讲解类的继承
    目录写在前面1.子类的创建1.1子类的创建方法1.2调用父类中特定的构造方法2.在子类中访问父类成员3.覆盖3.1覆盖父类中的方法3.2用父类的对象访问子类的成员4.不可被继承的成员...
    99+
    2022-11-13
  • Java超详细讲解ThreadLocal类的使用
    目录Threadlocal有什么用:ThreadLocal使用实例API介绍ThreadLocal的使用Threadlocal 的源码分析原理源码内部类ThreadLocalMapT...
    99+
    2022-11-13
  • 详细讲解Java抽象类示例
    目录Java抽象类概念Java抽象类示例继承Animal类的子类的示例Java抽象类详细使用方法1、定义抽象类2、继承抽象类3、实现抽象方法4、完整示例代码Java抽象类概念 Jav...
    99+
    2023-05-19
    Java 抽象 抽象类
  • Java枚举类知识详细讲解
    本篇内容主要讲解“Java枚举类知识详细讲解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java枚举类知识详细讲解”吧!枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常...
    99+
    2023-06-02
  • Java 超详细讲解核心类Spring JdbcTemplate
    目录JdbcTemplate概述JdbcTemplate开发步骤JdbcTemplate快速入门Spring产生JdbcTemplate对象JdbcTemplate的常用操作修改操作...
    99+
    2022-11-10
  • Java超详细讲解类变量和类方法
    目录1.static静态变量2.类变量(静态变量的访问)3.类方法1.static静态变量 1.静态变量被同一个类的所有对象共享 2.static类变量在类加载的时候就生成使用 st...
    99+
    2022-11-13
  • Java语言中4种内部类的超详细讲解
    目录一.内部类的介绍二.内部类的种类2.1实例内部类      2.2.静态内部类2.3局部内部类2.4匿名内部类总结 一.内部类的...
    99+
    2023-05-17
    java内部类详解 内部类java正确使用 java内部类有哪些
  • Java的Spring AOP详细讲解
    目录什么是AOP&作用AOP的动态代理技术基于JDK的动态代理cglib动态代理AOP相关概念AOP开发明确事项需要编写的内容AOP技术实现的内容AOP 底层使用哪种代理方式...
    99+
    2022-11-13
  • Java的Stream流详细讲解
    一.Stream 是什么 Stream是Java 8新增的重要特性, 它提供函数式编程支持并允许以管道方式操作集合. 流操作会遍历数据源, 使用管道式操作处理数据后生成结果集合, 这个过程通常不会对数据源造成影响。 ​ 同时stream不是...
    99+
    2023-08-31
    java 开发语言
  • Java 枚举详细讲解
    目录 什么是枚举? 如何使用Java枚举? 如何使用Java枚举中的常量值? 如何在Java枚举中添加方法? 什么是枚举? 枚举是一种特殊的数据类型,用于定义具有固定个数的常量集。它可以帮助我们更好地管理常量,使代码更易于阅读和维护。 ...
    99+
    2023-09-01
    java 开发语言 javase 面向对象 枚举
  • 详细讲解Swift中的类型占位符
    Swift 的类型推断能力从一开始就是语言的核心部分,它极大地减少了我们在声明有默认值的变量和属性时手动指定类型的工作。例如,表达式var number = 7不需要包含任何类型注释...
    99+
    2022-11-13
  • C++详细讲解引用类型
    目录一、C++中的引用类型二、如何使用C++中的引用类型一、C++中的引用类型 在以严蔚敏老师的《数据结构》为代表的诸多数据结构的书中,都出现了C++引用这一用法,所以在学习数据结构...
    99+
    2022-11-13
  • java反射超详细讲解
    目录Java反射超详解✌1.反射基础1.1Class类1.2类加载2.反射的使用2.1Class对象的获取2.2Constructor类及其用法2.4Method类及其用...
    99+
    2022-11-12
  • Java异常Exception详细讲解
    目录1、异常中最大的父类Throwable2、try-catch-finally三条语句注意的问题3、final-finally-finalize的各作用4、throws关键字5、t...
    99+
    2022-11-13
  • Java split方法详细讲解
    1. 问题描述 描述:在日常编写代码时,我们经常遇到需要将一串字符串中的数据进行分析摘取,从中获得分隔符外的数据,此时便不得不提split方法。 2. 方法介绍 分隔符可以是任意字符、符号、数字、字符串等。 2.1 split(String...
    99+
    2023-09-10
    java 开发语言
  • 超详细讲解Java异常
    目录一、Java异常架构与异常关键字Java异常简介Java异常架构1、Throwable2、Error(错误)3、Exception(异常)4、受检异常与非受检异常Java异常关键...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作