iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java之ThreadPoolExecutor类详解
  • 913
分享到

Java之ThreadPoolExecutor类详解

2024-04-02 19:04:59 913人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

ThreadPoolExecutor 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类详解的文章就介绍到这了,更多相关Java之ThreadPoolExecutor内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java之ThreadPoolExecutor类详解

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

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

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

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

下载Word文档
猜你喜欢
  • Java之ThreadPoolExecutor类详解
    ThreadPoolExecutor ThreadPoolExecutor是线程池框架的一个核心类,线程池通过线程复用机制,并对线程进行统一管理 降低系统资源消耗。通过复用...
    99+
    2022-11-12
  • Java中ThreadPoolExecutor类的详细讲解
    这篇文章主要介绍“Java中ThreadPoolExecutor类的详细讲解”,在日常操作中,相信很多人在Java中ThreadPoolExecutor类的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
  • Java线程池 ThreadPoolExecutor 详解
    目录一 为什么要使用线程池二 线程池原理详解2.1 线程池核心组成2.2 Execute 原理三 线程池的使用3.1 创建线程池3.1.1 自定义线程池3.1.2 功能线程池3.1....
    99+
    2022-11-13
  • 详解Java ThreadPoolExecutor的拒绝策略
    目录背景线程池基本原理线程池拒绝策略AbortPolicyCallerRunsPolicyDiscardPolicy示例执行结果DiscardOldestPolicy示例说明自定义拒...
    99+
    2022-11-13
  • java ThreadPoolExecutor 并发调用实例详解
    java ThreadPoolExecutor 并发调用实例详解概述通常为了提供任务的处理速度,会使用一些并发模型,ThreadPoolExecutor中的invokeAll便是一种。代码package test.current;impor...
    99+
    2023-05-31
    java threadpoolexecutor 并发调用
  • 详解Java并发包中线程池ThreadPoolExecutor
    目录一、线程池简介二、ThreadPoolExecutor类2.1、ThreadPoolExecutor成员变量以含义2.2、ThreadPoolExecutor的参数以及实现原理2...
    99+
    2022-11-12
  • Java基础之Object类详解
    object类的介绍 object是所有类的直接父类或者是间接父类,为什么这么说呢? 可以查询java8的API帮助文档: 可见在这样的一个类树中,所有的类的根还是Object类 ...
    99+
    2022-11-12
  • Java基础类之ArrayUtils工具类详解
    目录1、引入pom依赖2、ArrayUtils中的方法:3、举例总结1、引入pom依赖 <!-- https://mvnrepository.com/artifact/o...
    99+
    2022-11-12
  • java线程池ThreadPoolExecutor类怎么用
    这篇文章将为大家详细讲解有关java线程池ThreadPoolExecutor类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许...
    99+
    2023-06-29
  • 详解Java集合类之Map篇
    目录1.Map接口介绍2.Map接口分析3.Map接口方法4.Map遍历方式1.Map接口介绍 Map用于保存具有映射关系的数据:Key - Value 对于Set,底层其实依然是一...
    99+
    2022-11-13
  • 详解Java集合类之HashSet篇
    目录1.Set接口方法2.HashSet3.HashSet的扩容机制 - 初次添加数据4.HashSet的扩容机制 - 继续添加数据5.HashSet的扩容机制 - 添加重复元素1....
    99+
    2022-11-13
  • 详解Java集合类之List篇
    目录1.集合框架体系2.Collection接口3.迭代器4.List接口5.ArrayListArrayList扩容机制ArrayList使用实例6.Vector7.LinkedL...
    99+
    2022-11-13
  • Java IO之流的分类详解
    目录一、根据流向分为输入流和输出流:二、根据传输数据单位分为字节流和字符流三、根据功能分为节点流和包装流总结一、根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的。 ...
    99+
    2022-11-13
  • Java多线程编程基石ThreadPoolExecutor示例详解
    目录前言为什么用线程池参数介绍核心线程数和最大线程数设置使用示例线程池执行任务的流程线程池执行流程图源码解读基础属性和变量execute(Runnable command)addWo...
    99+
    2023-05-16
    Java多线程ThreadPoolExecutor Java ThreadPoolExecutor
  • Java基础类库之StringBuffer类用法详解
    StringBuffer类 String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能 每个字符串的常量都属于一个String类匿名对象,并且不能修改;St...
    99+
    2022-11-13
  • java线程池ThreadPoolExecutor类使用小结
    目录一、workQueue任务队列二、拒绝策略三、ThreadFactory自定义线程创建四、ThreadPoolExecutor扩展五、线程池线程数量在《阿里巴巴java开发手册》...
    99+
    2022-11-13
  • Java并发编程之Executors类详解
    一、Executors的理解 Executors类属于java.util.concurrent包; 线程池的创建分为两种方式:ThreadPoolExecutor ...
    99+
    2022-11-12
  • Java并发编程之LockSupport类详解
    目录一、LockSupport类的属性二、LockSupport类的构造函数三、park(Object blocker)方法 和 park()方法分析四、parkNanos(Obje...
    99+
    2022-11-12
  • Java并发编程之详解ConcurrentHashMap类
    前言 由于Java程序员常用的HashMap的操作方法不是同步的,所以在多线程环境下会导致存取操作数据不一致的问题,Map接口的另一个实现类Hashtable 虽然是线程安全的,但是...
    99+
    2022-11-12
  • 详解Java集合类之HashTable,Properties篇
    目录1.基本介绍2.HashTable底层3.HashTable扩容机制4.HashMap和HashTable的对比5.Properties6.集合选型规则1.基本介绍 HashTa...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作