java线程池

news/2024/5/14 16:13:36/文章来源:https://blog.csdn.net/qq_59616295/article/details/126920810

目录

一、浅谈对线程池的理解

二、线程池常用类和接口

三、线程池的核心参数

四、线程池的状态

五、线程池的执行流程

六、常见的线程池

FixedThreadPool:线程数固定的线程池

CachedThreadPool:可缓存线程池,线程数根据任务动态调整的线程池

SingleThreadExecutor:单线程化的线程池

ScheduledThreadPool:能实现定时、周期性任务的线程池


一、浅谈对线程池的理解

线程池,顾名思义就是用于创建和管理线程的容器,省去了频繁创建和销毁线程的操作,无需反复创建而过度消耗资源。

使用线程池有如下优点:

  • 降低线程的创建和销毁造成的系统开销
  • 提高响应速度。任务到达时,先相对于手动创建线程,直接从线程池中拿线程,速度肯定快很多
  • 提高线程的可管理性,线程是稀缺资源,如果无限制创建,不进消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。

二、线程池常用类和接口

Java标准库提供了如下几个类或接口,来操作并使用线程池:

  • ExecutorService接口:来进行管理操作线程池;
  • Executors类:用于创建线程池的工具类;
  • ThreadPoolExecutor及其子类:线程池;

三、线程池的核心参数

  • corePoolSize(核心线程数):线程池维护的最小线程数量,核心线程创建后不会被回收。大于核心线程数的线程,在空闲时间超过keepAliveTime后会被回收
  • maximumPoolSize(最大线程数):线程池允许创建的最大线程数量

  • keepAliveTime(存活时间):当一个可被回收的线程的空闲时间大于keepAliveTime,就会被回收。

  • BlockingQueue(工作队列):一个阻塞工作队列,用来存储等待执行的任务

  • ThreadFactory 线程创建工厂):用于创建线程,以及自定义线程名称,需要实现ThreadFactory接口

  • RejectedExecutionHandler(拒绝策略):当线程池线程内的线程耗尽,并且工作队列达到已满时,新提交的任务,将使用拒绝策略进行处理

常见拒绝策略:

  • ThreadPoolExecutor.AbortPolicy:默认策略,丢弃任务并抛出RejectedExecutionException异常;
  • ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常;
  • ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列中的末尾任务(最旧的任务,也就是最早进入队列的任务)后,继续将当前任务提交给线程池;
  • ThreadPoolExecutor.CallerRunsPolicy:由原调用线程处理该任务 (谁调用,谁处理);
     

四、线程池的状态

线程池的状态分为:RUNNING , SHUTDOWN , STOP , TIDYING , TERMINATED

  • RUNNING:运行状态,线程池被一旦被创建,就处于RUNNING状态,并且线程池中的任务数为0。该状态的线程池会接收新任务,并处理工作队列中的任务。
    • 调用线程池的shutdown()方法,可以切换到SHUTDOWN关闭状态;
    • 调用线程池的shutdownNow()方法,可以切换到STOP停止状态;
  • SHUTDOWN :关闭状态,该状态的线程池不会接收新任务,但会处理工作队列中的任务;
    • 当工作队列为空时,并且线程池中执行的任务也为空时,线程池进入TIDYING状态;
  • STOP:停止状态,该状态的线程不会接收新任务,也不会处理阻塞队列中的任务,而且会中断正在运行 的任务;
    • 线程池中执行的任务为空,进入TIDYING状态;
  • TIDYING :整理状态,该状态表明所有的任务已经运行终止,记录的任务数量为0
    • terminated()执行完毕,进入TERMINATED状态;
  • TERMINATED : 该状态表示线程池彻底终止。

五、线程池的执行流程

当有一个新的任务时:

首先会检查核心线程数是否已满,如果核心线程数没满,则会分配一个核心线程去执行,

如果核心线程数满了,检查工作队列是否已满,如果没满,则加入到工作队列,

如果工作队列满了,再检查有没有超过最大线程数,

如果没满,则创建一个非核心线程,去执行。

如果超过最大核心线程数,则执行拒绝策略。

六、常见的线程池

FixedThreadPool:线程数固定的线程池

  线程池参数:

  • 核心线程数和最大线程数一致
  • 非核心线程线程空闲存活时间,即keepAliveTime0
  • 阻塞队列为无界队列LinkedBlockingQueue

使用场景:适用于处理CPU密集型的任务,确保CPU在长期被工作线程使用的情况下,尽可能的少的分配线程,即适用执行长期的任务。

CachedThreadPool:可缓存线程池,线程数根据任务动态调整的线程池

线程池参数:

  • 核心线程数为0
  • 最大线程数为Integer.MAX_VALUE
  • 工作队列是SynchronousQueue同步队列
  • 非核心线程空闲存活时间为60

使用场景: 用于并发执行大量短期的小任务。

SingleThreadExecutor:单线程化的线程池

线程池参数

  • 核心线程数为1
  • 最大线程数也为1
  • 阻塞队列是LinkedBlockingQueue
  • 非核心线程空闲存活时间为0

使用场景: 适用于串行执行任务的场景,将任务按顺序执行。

ScheduledThreadPool:能实现定时、周期性任务的线程池

线程池参数:

  • 最大线程数为Integer.MAX_VALUE
  • 阻塞队列是DelayedWorkQueue
  • keepAliveTime0

使用场景: 周期性执行任务,并且需要限制线程数量的需求场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_10277.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

肯德尔(Kendall)相关系数概述及计算例

目录 1. 何谓相关(correlation)? 2. 肯德尔相关 3. 肯德尔相关的假设 4. 计算公式及代码示例 4.1 Tau-a 4.2 Tau-b 1. 何谓相关(correlation)? 相关是指一种双变量分析(bi-variate analysis&#xff…

不知道数字化转型有什么意义?实现数字化转型价值都有哪些路径

近些年来,随着人工智能、云计算、大数据、物联网、区块链等新一代前沿技术的普及应用,社会的方方面面都有了信息化、数字化的身影,并通过相关技术、理念、应用创造了从未体验过的数字化社会,对整个社会形式进行了一次深层次的转型…

JVM原理及优化_垃圾回收器

文章目录JVM原理及调优_垃圾回收器什么是垃圾收集器?垃圾回收器详解SerialParNewParallel ScavengeSerial OldParallnel oldCMSG1JVM原理及调优_垃圾回收器 什么是垃圾收集器? 垃圾收集器是垃圾回收算法(引用计数法、标记清除法、标记整理法…

PLM是什么?为什么要上PLM?有什么好处?

PLM是什么?或许早在五年前还有这个疑问,但如今已成为行业竞争的必需品。 PLM即对产品从创建、使用到最终报废,是一种对全生命周期产品数据信息进行管理的理念;是一种应用于在单一地点的企业内部、分散在多个地点的企业内部&#…

SpringBoot JavaBean对象拷贝 orika

前言: 日常开发中,经常会遇到将一个对象bean值复制到另一个bean,一般通过set方法一个一个属性写上去,比较麻烦。当然也有spring、apache的属性拷贝工具,这里介绍一下orika orika 是什么? Orika 是一个 Java Bean 映射框架,它可以递归地将数…

Oracle 11g第一次启动SQL Developer所出现的问题

Oracle 11g第一次启动SQL Developer提示缺少快捷方式 1)问题复刻 当第一次启动SQL Developer的时候提示我 :“Windows 正在查找SQLDEVELOPER.BAT。如果想亲自查找文件,请单击"浏览” 。这个时候如果没有点击浏览,过一会他会自动跳到图二,此时就算点击了修复也无济于事…

zabbix服务器搭建

文章目录zabbix1. 环境准备2. zabbix服务器安装3. 监控本机4. 通过zabbix-agent监控远程机器5. zabbix用户与用户群组6. 监控项与应用集7. 为监控项创建图形8. 自定义监控项9. 为自定义监控项创建图形10zabbix zabbix官网 1. 环境准备 主机ipzabbix_server192.168.44.10agen…

什么是自动采矿卡车autonomous mining trucks

自动采矿卡车 (AMT) 是无人驾驶的矿山重型车辆,可以感知环境并在矿山运输路面上导航,无需任何人工干预。AMT 降低了设备与辅助设备或配备的手动车辆 (EMV) 接触的风险。 矿业在世界经济中发挥着重要作用。随着发达国家追求零伤亡,进入技术工人…

Jenkins Pipeline项目实战

一、项目流程 Jenkins从git拉取指定tag代码 Jenkins构建代码、镜像以及推送镜像到镜像库 Jenkins通过Publish Over SSH通知远程服务器拉取镜像、远程服务器通过镜像启动容器二、实现流程 1、从代码仓中拉取Jenkinsfile文件 2、从git拉取指定tag代码 配置Git参数: 剩下的部分需…

Spring学习的第二天

1. Spring 管理第三方资源导入Druid 坐标<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency>配置数据源对象作为Spr…

【牛客刷题】每日一练—ArrayList的实例强化

✨hello&#xff0c;进来的小伙伴们&#xff0c;你们好呐&#xff01;✨ &#x1f362;&#x1f362;系列专栏&#xff1a;【牛客刷题】 &#x1f32f;&#x1f32f;作者简介&#xff1a;一名大三在读的科班Java编程小白&#xff0c;星夜漫长&#xff0c;你我同行! &#x1f37…

383.赎金信

题目来源&#xff1a; 力扣https://leetcode.cn/problems/ransom-note/题目简介&#xff1a; 判断字符串a中的字母能不能构成字符串b&#xff0c;能的话就返回true&#xff0c;不能就返回false&#xff0c;字符串a里的字母每个都只能用一次&#xff0c;不能重复使用 思路&am…

Endpoint Central的IT资产管理(ITAM)

什么是 IT 资产管理 (ITAM) IT 资产管理 (ITAM) 是识别、发现、采购、管理、监控和处置企业网络中存在的所有公司拥有的数据、设备和软件元素的过程。ITAM 工具可确保集中查看网络中存在的所有资产以及软件和硬件详细信息。拥有完整的 ITAM 流程可以使您能够就收购新资产做出有…

笨方法学Python

前言 这本书指导你在Python中通过练习和记忆等技巧慢慢建设和建立技能,然后应用它们解决越来越困难的问题。在这本书的最后&#xff0c;你需要拥有必要的工具开始进行更多复杂程序的学习。我喜欢告诉大家&#xff0c;我的书带给你们“编程黑带”。意思是说你知道的基础知识足够…

『华强买瓜』奇袭好莱坞!Jupyter也能创建可交互仪表板啦!超全面的英语论文写作套路;神经辐射场NeRF工具包;前沿论文 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f4c6;电子月刊 | &#x1f514;公众号下载资料 | &#x1f369;韩信子 &#x1f4e2; 好莱坞全明星版『华强买瓜』&#xff1a;你这 AI 保熟吗&#xff1f; https://weibo.com/2395607675/M61L994kN 一起来看看 AI 最近又搞出了什么好玩意儿…

gradle缓存路径

gradle缓存路径网上有很多配置教程,但是实际使用过程中发现不是很准确,验证下缓存配置 1.个人认为最优雅 在gradle的安装目录&#xff0c;编辑bin文件夹下的gradle文件&#xff0c;然后找到如下语句: # Add default JVM options here. You can also use JAVA_OPTS and GRADLE…

eplan里面导入3D图

1.第一步,打开RICAD-3D软件 2.点击RICAD-3D 3.进入页名后,①首先点击RITTAL机柜系统-②SMall enclosours-③选中双击compact enclosures-AE 4.双击后出现这个页面,在开放式列表中型号选择1050.500的, 5.点击STEP 3D后面的向下箭头,点击3D系统中性格式,点击STEP3d 6.这边…

初识SpringBoot

文章目录一、SpringBoot特点优点缺点二、时代背景1、微服务2、分布式分布式的困难分布式解决3、云原生上云的困难三、快速上手1、导入依赖2、创建架构编写业务MainApplication作为主程序应用controller作为业务层3、修改端口号一、SpringBoot特点 优点 创建独立Spring应用内嵌…

WoShop多商户直播短视频APP小程序商城全开源无加密商城源码

WoShop多商户直播短视频APP小程序商城全开源无加密商城源码基于现场直播购物模式&#xff0c;用户可以“边看边买”现场直播商城平台&#xff0c;全终端支持&#xff0c;统一管理后台&#xff0c;传播更强&#xff0c;管理更方便&#xff0c;支持私有化配置&#xff0c;提供系统…

牛视系统源码定制开发come here,抖音矩阵系统。

Seo是Search Engine Optimization的缩写&#xff0c;译成英文的意思是‘浏览器强化’&#xff0c;可能有很多爸爸妈妈就会问了&#xff1a;抖音什么时候沦为了浏览器&#xff1f;他不是一种SNS影视娱乐应用软件吗&#xff1f;假如您还这么想&#xff0c;而且就行不通了&#xf…