JAVA-----线程池

目录

1.简单理解一下线程池

2.线程池参数

3.Executors


                   ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​      

1.简单理解一下线程池

线程池,就是用来存储线程的,然后如果有任务传进线程池里,那么空闲的线程就会去执行传进来的任务

打个比方:

把洗浴中心看成一个线程池,当有顾客进来消费时,那么就会有一个搓澡师傅对这个顾客执行任务,不断的有顾客进来,剩下的搓澡师傅就会为其服务,如果前面的搓澡师傅服务完上一个顾客,那么这个搓澡师傅就可以接待下一个顾客,但是当有一天生意火爆时,同一时间顾客数大于搓澡师傅的数量时,这些顾客就会阻塞等待搓澡完成手里的工作,再对其进行服务

再来谈谈使用线程池的目的:

在日常开发中,虽说创建销毁线程的开销要比进程小的多,但是频繁的创建销毁线程也消耗系统资源,然而使用线程池,线程池通过对线程的复用,从而达到减少系统资源开销的效果

线程池的优势:

    ●    提高性能:创建和销毁线程会消耗系统资源,包括CPU时间和内存。线程池通过复用线程,减少了这种资源开销。例如,在处理大量短时间任务时,频繁创建线程会使程序变慢,而线程池能使程序高效运行。

    ●    控制资源:线程池可以限制同时执行的线程数量,防止过多线程耗尽系统资源。比如在一个服务器应用中,合理设置线程池大小能保证服务器稳定运行,避免因过多线程导致内存不足或系统崩溃。

    ●    便于管理:可以统一管理线程的生命周期、任务分配和执行情况。例如,通过线程池能够方便地监控哪些线程在工作、哪些在等待,以及任务的排队情况等。

2.线程池参数

1.Java标准库中提供ThreadPoolExecutor这个类来创建线程池

2.这个类中最核心的方法是submit(Runnable)方法(用来将要执行的任务添加到线程池里面)

3.ThreadPoolExecutor类的构造方法有4种

其中第4个构造方法的参数最多,了解了这个构造方法的参数,其他构造方法的参数也就了解了

1.int orePoolSize:

core是核心的意思

size是个数的意思

所以这个参数的意思是核心线程的个数

核心线程是不管任务多少,只要线程池不被销毁(且不允许核心线程超时退出的情况下),如果核心线程被设置为允许超时退出,那么核心线程一旦未接到任务的时间超过超时时间就会被销毁

2.int maximumPoolSize:

max为最大

所以maximumPoolSize为最大线程数

最大线程数=核心线程数+非核心线程数

非核心线程相当于临时工,在核心线程忙不过来的时候帮忙处理任务,但非核心线程的最大值不能超过最大线程数与核心线程数的差

非核心线程一旦未接到任务的时间超过超时时间就会被销毁

3.long keepAliveTime:

时间,当非核心线程超过该时间没有接到任务,没有接到任务的非核心线程就会被销毁

4.TimeUnit unit:

超时时间的单位

TimeUnit是Java中的一个枚举类型,位于java.util.concurrent包中,用于在不同的时间单位之间进行转换以及执行基于时间的操作,以下是详细介绍:

时间单位

• 基本单位:包括纳秒(NANOSECONDS)、微秒(MICROSECONDS)、毫秒(MILLISECONDS)、秒(SECONDS)、分(MINUTES)、时(HOURS)、天(DAYS)这7种时间单位,这些单位在表示时间跨度和执行定时任务时经常用到。

• 单位换算:TimeUnit提供了方便的单位换算方法。例如,从毫秒转换为秒,可以使用TimeUnit.SECONDS.convert(long duration, TimeUnit unit)方法,其中duration是要转换的时长,unit是原始时间单位。

5.BlockingQueue<Runnable> workQueue:

工作队列,使用submit方法将任务添加到队列中,然后线程池中的线程再从队列中拿去任务进行执行

6.ThreadFactory threadFactory:

线程工厂,我们不用自己创建线程工厂,直接调用

Executors.defaultThreadFactory()就行

7.RejectedExecurionHandler:

拒绝策略

对于线程池来说,发现入队列操作时,队列满了,不会真的触发‘入队列1操作’,不会真阻塞,而是执行拒绝策略相关的代码

ThreadPoolExecutor类里面为我们提供了4种拒绝策略:

这4种拒绝策略都是ThreadPoolExecutor中的静态方法

3.Executors

为了简化ThreadPoolExecutor对象的实例化,JAVA标准库中还提供了Executors类

Executors创建线程池的几种方式:

1. newFixedThreadPool:创建固定线程数的线程池

2.newCachedThreadPool:创建线程数目动态增长的线程池.

3.newSingleThreadExecutor:创建只包含单个线程的线程池.

4.newScheduledThreadPool:设定延迟时间后执行命令,或者定期执行命令.是进阶版的Timer.Executors本质上是ThreadPoolExecutor类的封装

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

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

相关文章

PortQry下载安装使用教程(超详细),Windows测试UDP端口

《网络安全自学教程》 PortQry是微软官方提供的一款TCP/IP连接「排障工具」&#xff0c;用来「检查」TCP/UDP「端口状态」。 平时检查端口状态&#xff0c;最常用的是telnet&#xff0c;但它是基于TCP协议的&#xff0c;无法检测「UDP端口」&#xff0c;这篇文章教大家如何在W…

Flink-cdc Schema Evolution 详解

Flink-cdc Schema Evolution 详解 github原文 glimpse flink-cdc-3 glimpse 源码基于 ~/project/flink_src/flink-cdc master !4 ❯ git remote -v origin https://github.com/apache/flink-cdc.git (fetch) origin https://github.com/apache/flink-cdc.git (push) ~/p…

介绍一款Java开发的企业接口管理系统和开放平台

介绍一款Java开发的企业接口管理系统和开放平台&#xff0c;YesApi接口管理平台Java版本。该系统基于Java开发&#xff0c;可以帮助企业进行统一接口管理、API接口开放&#xff0c;以及用于PaaS系统和SaaS产品平台的快速二次开发和搭建。 一、系统概述 YesApi接口大师&#x…

ClickHouse 5节点集群安装

ClickHouse 5节点集群安装 在此架构中&#xff0c;配置了五台服务器。其中两个用于托管数据副本。其他三台服务器用于协调数据的复制。在此示例中&#xff0c;我们将创建一个数据库和表&#xff0c;将使用 ReplicatedMergeTree 表引擎在两个数据节点之间复制该数据库和表。 官…

RHCE作业二

1.要求&#xff1a; 配置nginx服务通过ip访问多网站 2. 1关闭防火墙 2创建ip 3配置 4创建文件 5测试

logback 如何将日志输出到文件

如何作 将日志输出到文件需要使用 RollingFileAppender&#xff0c;该 Appender 必须定义 rollingPolicy &#xff0c;另外 rollingPollicy 下必须定义 fileNamePattern 和 encoder <appender name"fileAppender" class"ch.qos.logback.core.rolling.Rollin…

二、Spring的执行流程

文章目录 1. spring的初始化过程1.1 ClassPathXmlApplicationContext的构造方法1.2 refresh方法&#xff08;核心流程&#xff09;1.2.1 prepareRefresh() 方法1.2.2 obtainFreshBeanFactory() 方法1.2.3 prepareBeanFactory() 方法1.2.4 invokeBeanFactoryPostProcessors() 方…

shodan2---清风

注&#xff1a;本文章源于泷羽SEC&#xff0c;如有侵权请联系我&#xff0c;违规必删 学习请认准泷羽SEC学习视频:https://space.bilibili.com/350329294 实验一&#xff1a;search 存在CVE-2019-0708的网络设备 CVE - 2019 - 0708**漏洞&#xff1a;** 该漏洞存在于远程桌面…

解读数字化转型的敏捷架构:从理论到实践的深度分析

在当今数字经济的推动下&#xff0c;企业要在瞬息万变的市场中保持竞争力&#xff0c;数字化转型已经不再是一种选择&#xff0c;而是不可避免的战略需求。然而&#xff0c;企业如何从理论到实践进行有效的转型&#xff0c;尤其是在复杂的技术环境中&#xff0c;如何通过正确的…

来源爬虫程序调研报告

来源爬虫程序调研报告 一、什么是爬虫 爬虫&#xff1a;就是抓取网页数据的程序。从网站某一个页面&#xff08;通常是首页&#xff09;开始&#xff0c;读取网页的内容&#xff0c;找到在网页中的其它链接地址&#xff0c;然后通过这些链接地址寻找下一个网页&#xff0c;这…

中小型门诊管理系统源码,云诊所管理系统源码,前端技术栈:Vue 2 , Vite , Vue Router 3

中小型门诊管理系统源码&#xff0c;云诊所管理系统源码&#xff0c; 前端技术栈&#xff1a;Vue 2 Vite Vue Router 3 Vuex 3 Element Plus Axios TypeScript Quill Election 后端技术栈&#xff1a;Spring Boot MyBatis MyBatis-Plus Spring Security Swagger2 …

使用Python计算相对强弱指数(RSI)进阶

使用Python计算相对强弱指数&#xff08;RSI&#xff09;进阶 废话不多说&#xff0c;直接上主题&#xff1a;> 代码实现 以下是实现RSI计算的完整代码&#xff1a; # 创建一个DataFramedata {DATE: date_list, # 日期CLOSE: close_px_list, # 收盘价格 }df pd.DataF…

基于丑萌气质狗--C#的sqlserver学习

#region 常用取值 查询List<string> isName new List<string> { "第一", "第二", "第三", "第四" }; List<string> result isName.Where(m > m "第三").ToList();MyDBContext myDBnew MyDBContext(…

【数据分享】中国汽车市场年鉴(2013-2023)

数据介绍 在这十年里&#xff0c;中国自主品牌汽车迅速崛起。吉利、长城、比亚迪等品牌不断推出具有竞争力的车型&#xff0c;在国内市场乃至全球市场都占据了一席之地。同时&#xff0c;新能源汽车的发展更是如日中天。随着环保意识的提高和政策的大力支持&#xff0c;电动汽车…

CSS伪元素以及伪类和CSS特性

伪元素&#xff1a;可以理解为假标签。 有2个伪元素 &#xff08;1&#xff09;::before &#xff08;2&#xff09;::after ::before <!DOCTYPE html> <html> <head><title></title><style type"text/css">body::before{con…

Android简单控件实现简易计算器

学了一些Android的简单控件&#xff0c;用这些布局和控件&#xff0c;设计并实现一个简单计算器。 计算器的界面分为两大部分&#xff0c;第一部分是上方的计算表达式&#xff0c;既包括用户的按键输入&#xff0c;也包括计算结果 数字&#xff1b;第二部分是下方的各个按键&a…

【redis】初识非关系型数据库——redis

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 初识 Redis Redis是⼀种基于键值对&#xff08;key-value&#xff09;的NoSQL数据库&#xff0c;与很多键值对数据库不同的是&#xff0c;Redis 中的值可以是由string&#xff08;字符串&#xff09;、hash&#xff0…

基于协同过滤算法的个性化课程推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

AndroidStudio部署多渠道打包环境(一)

对于游戏来说&#xff0c;需要上架国内很多家应用商店&#xff0c;还有一些小的渠道SDK&#xff0c;大大小小加起来也有几十家了&#xff0c;那么我们部署了多渠道打包环境之后就很方便了。 一 、配置游戏基本参数&#xff1a;在app下面的build.gradle文件里编辑&#xff0c; …

Java全栈经典面试题剖析4】JavaSE高级 -- 包装类,String, 类方法

目录 面试题3.1 什么是自动装箱与拆箱&#xff1f;用什么方式来装箱与拆箱&#xff1f; 面试题3.2 int和Integer有什么区别&#xff1f; 面试题3.3 Integer常量池 面试题3.4 字符串常量池 面试题3.5 这句代码创建了几个对象? String str1 new String("xyz");…