线程池(一)

1.线程池的基本概念

1.1 什么是线程池:

        线程池是一种利用池化技术思想来实现的线程管理技术,主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。我们可以创建线程池来复用已经创建的线程来降低频繁创建和销毁线程所带来的资源消耗。在JAVA中主要是使用ThreadPoolExecutor类来创建线程池,并且JDK中也提供了Executors工厂类来创建线程池(不推荐使用)。

1.2 线程池的优点:

        降低资源消耗,复用已创建的线程来降低创建和销毁线程的消耗。
        提高响应速度,任务到达时,可以不需要等待线程的创建立即执行。
        提高线程的可管理性,使用线程池能够统一的分配、调优和监控。

1.3 为什么使用线程池:

        在执行一个异步任务或并发任务时,往往是通过直接new Thread()方法来创建新的线程,当数据量大,需要创建的多线程,这样做弊端较多,更好的解决方案是合理地利用线程池,对多线程进行统一的管理。

1.4 线程池的种类:
        java通过Executors提供四种线程池,分别为:

                newCachedThreadPool

                newFixedThreadPool

                newScheduledThreadPool

                newSingleThreadExecutor

2.线程池概述

Java中线程池的核心实现类是ThreadPoolExecutor,可以通过该类地构造方法来构造一个线程池,我们先来看下ThreadPoolExecutor的整个继承体系

Executor接口提供了将任务的执行和线程的创建以及使用解耦开来的抽象
ExecutorService接口继承了Executor接口,在Executor的基础上,增加了一些关于管理线程池本身的一些方法。

2.1 ThreadPoolExecutor的构造组成

        corePoolSize,核心线程数量,决定是否创建新的线程来处理到来的任务
        maximumPoolSize,最大线程数量,线程池中允许创建线程地最大数量
        keepAliveTime,线程空闲时存活的时间
        unit,空闲存活时间单位
        workQueue,任务队列,用于存放已提交的任务
        threadFactory,线程工厂,用于创建线程执行任务
        handler,拒绝策略,当线程池处于饱和时,使用某种策略来拒绝任务提交

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) 
2.2 线程池的生命周期
2.2.1 线程池五种状态

线程池的状态一共有五种,分别是RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED;

  1. RUNNING,表示可接受新任务,且可执行队列中的任务;
  2. SHUTDOWN,表示不接受新任务,但可执行队列中的任务;
  3. STOP,表示不接受新任务,且不再执行队列中的任务,且中断正在执行的任务;
  4. TIDYING,所有任务已经中止,且工作线程数量为0,最后变迁到这个状态的线程将要执行terminated()钩子方法,只会有一个线程执行这个方法;
  5. TERMINATED,中止状态,已经执行完terminated()钩子方法;
2.2.2 线程池生命周期流转

(1)新建线程池时,它的初始状态为RUNNING,这个在上面定义ctl的时候可以看到;

(2)RUNNING->SHUTDOWN,执行shutdown()方法时;

(3)RUNNING->STOP,执行shutdownNow()方法时;

(4)SHUTDOWN->STOP,执行shutdownNow()方法时;

(5)STOP->TIDYING,执行了shutdown()或者shutdownNow()后,所有任务已中止,且工作线程数量为0时,此时会执行terminated()方法;

(6)TIDYING->TERMINATED,执行完terminated()方法后;

 2.3 线程池地执行流程
  1. 如果workerCount < corePoolSize ==> 创建线程执行提交的任务
  2. 如果workerCount >= corePoolSize && 阻塞队列未满 ==> 添加至阻塞队列,等待后续线程来执行提交地任务
  3. 如果workerCount >= corePoolSize && workerCount < maxinumPoolSize && 阻塞队列已满 ==> 创建非核心线程执行提交的任务
  4. 如果workerCount >= maxinumPoolSize && 阻塞队列已满 ==> 执行拒绝策略

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

EIA预测2024年全球石油市场供求平衡,非欧佩克产油国将抵消欧佩克减产影响

美国能源信息署&#xff08;EIA&#xff09;预测&#xff0c;2024年全球石油市场将达到供求平衡状态&#xff0c;主要原因是非欧佩克国家的原油产量增长将抵消欧佩克近期的减产。根据EIA周二公布的短期能源展望报告&#xff0c;全球原油供应量预计将增加至1.0276亿桶/日。而与此…

Linux学习之高级IO

之前的内容我们基本掌握了基础IO&#xff0c;如套接字&#xff0c;文件描述符&#xff0c;重定向&#xff0c;缓冲区等知识都是文的基本认识&#xff0c;而高级IO则是指更加高效的IO。 对于应用层&#xff0c;在读写的时候&#xff0c;本质就是把数据写给OS&#xff0c;若一方…

一季度盈利大增65.62%,神州泰岳游戏表现抢眼

易采游戏网5月8日消息&#xff0c;近日国内知名游戏上市公司神州泰岳公布了其2023年一季度的财务报告&#xff0c;报告显示&#xff0c;公司一季度盈利大增65.62%&#xff0c;这一数字远超过市场预期&#xff0c;引发了业界的广泛关注。 神州泰岳此次盈利大增&#xff0c;主要得…

#Pandas数据分析——超好用的Groupby与map、apply、applymap详解

apply应该是大家的老朋友了&#xff0c;它相比agg和transform而言更加灵活&#xff0c;能够传入任意自定义的函数&#xff0c;实现复杂的数据操作。在Pandas数据处理三板斧&#xff0c;你会几板&#xff1f;中&#xff0c;介绍了apply的使用&#xff0c;那在groupby后使用apply…

ruoyi-nbcio 基于flowable规则的多重并发网关的任意跳转

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

Qt 6.7 正式发布!

本文翻译自&#xff1a;Qt 6.7 Released! 原文作者&#xff1a;Qt Group研发总监Volker Hilsheimer 在最新发布的Qt 6.7版本中&#xff0c;我们大大小小作出了许多改善&#xff0c;以便您在构建现代应用程序和用户体验时能够享受更多乐趣。 部分新增功能已推出了技术预览版&a…

数据丢失不慌张,手机数据恢复一键解决!

如今手机已经成为我们生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;手机都扮演着重要的角色。随着使用时间的增加&#xff0c;手机数据丢失的问题也时常发生。那么手机数据恢复有哪些方法呢&#xff1f;面对这种情况&#xff0c;先不要慌张&#xff0c;本文将…

STEP BY STEP带你使用Docker搭建MySql-MGR高可用集群

数据的重要性 数据已成为当今数字时代最重要的资产之一&#xff0c;对于企业的成功至关重要。它可以帮助企业了解客户、市场和自身运营&#xff0c;提高运营效率&#xff0c;做出明智决策&#xff0c;推动创新&#xff0c;并获得竞争优势。 数据的采集&#xff0c;存储&#…

数字人制作原理:捕捉、建模与合成

在感知系统中&#xff0c;我们与外部合作者一起创建逼真的 3D 人类&#xff0c;其行为可以像虚拟世界中的真实人类一样。这项工作在今天有许多实际应用&#xff0c;并且对于元宇宙的未来至关重要。但是&#xff0c;在感知系统中&#xff0c;我们的目标是科学的——通过重现人类…

【前端Vue】——初识Vue.js

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

Vue线上环境禁止打印console.log

当我们在开发项目时&#xff0c;我们会使用大量的console.log&#xff0c;这样方便我们去调试&#xff0c;但是当正常上线后&#xff0c;在生产环境&#xff0c;我们是不喜欢打印的信息暴露在浏览器控制台的。 这时候我们可以通过一行代码解决&#xff1a; 在main.js文件中添加…

首个ICLR时间检验奖出炉,机器学习大牛Max Welling和OpenAI创始团队成员Diederik Kingma获奖

国际表征学习大会&#xff08;ICLR&#xff09;是机器学习领域的一个学术会议&#xff0c;每年一次&#xff0c;通常在每年四月底或五月初举行。会议包括特邀演讲以及经评审论文的口头和海报展示。 ICLR 由 Yann LeCun&#xff08;杨立昆&#xff09;和 Yoshua Bengio 两位图灵…

基于opencv的车辆统计

车辆统计&#xff09; 一、项目背景二、整体流程三、常用滤波器的特点四、背景减除五、形态学开运算闭运算 六、项目完整代码七、参考资料 一、项目背景 检测并识别视频中来往车辆的数量 最终效果图&#xff1a; 二、整体流程 加载视频图像预处理&#xff08;去噪、背景减除…

【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?

一、背景 一套生ES集群&#xff0c;版本为7.12.1&#xff0c;近期频繁告警&#xff0c;频繁出现索引分片异常&#xff0c;索引状态异常&#xff0c;导致应用无法正常写入ES&#xff0c;另外&#xff0c;也经常出现节点掉问题。通过分析相关ES日志&#xff0c;显示和当前JAVA G…

【微机原理及接口技术】8086/8088系统时序和微机总线

【微机原理及接口技术】8086/8088系统时序和微机总线 文章目录 【微机原理及接口技术】8086/8088系统时序和微机总线前言一、8086/8088引脚信号和工作模式1.8088 的两种组态模式2.最小组态的引脚信号3.最小组态的总线形成4.最大组态的总线形成 二、8086/8088典型时序1.三种周期…

人工智能|推荐系统——工业界的推荐系统之序列建模

一、LastN特征 LastN&#xff1a;⽤户最近的&#x1d45b; 次交互&#xff08;点击、点赞等&#xff09;的物品ID。 对LastN物品ID做embedding&#xff0c;得到 &#x1d45b; 个向量。 把 &#x1d45b; 个向量取平均&#xff0c;作为⽤户的⼀种特征。 适⽤于召回双塔模型、…

Python 全栈体系【四阶】(四十一)

第五章 深度学习 九、图像分割 1. 基本介绍 1.1 什么是图像分割 图像分割&#xff08;Segmentation&#xff09;是图像处理和机器视觉一个重要分支&#xff0c;其目标是精确理解图像场景与内容。图像分割是在像素级别上的分类&#xff0c;属于同一类的像素都要被归为一类&a…

论文查重率高,有什么办法降重吗?

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下&#xff0c;延毕的威胁可能就在眼前。对于即将告别校园的学子们&#xff0c;这无疑是个噩梦。四年磨一剑&#xff0c;谁也不想在最后关头功亏一篑。 查重率过高&#xff0c;无非以下两种原因。要么是作为“…

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)

Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09; 目录 Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09;API 风格选项式API组合式API混合式 事件监听…

DDD架构学习

文章目录 领域建模事件风暴四色建模法 DDD名称解析领域子域核心域通用域支撑域限界上下文战术设计实体值对象聚合和聚合根工厂资源库领域服务领域事件 DDD代码的分层名词解析实体值对象聚合根领域服务领域事件 VO&DTO&DO&PO博客 领域建模 领域驱动设计的核心在于领…