java 多线程:
一般通过继承Thread类,实现Runnable接口,实现Callable接口,以及线程池。
这里主要是讲解线程池:
通过线程池主要是创建以下4种类型的线程池。
工具类 : Executors
ExecutorService newFixedThreadPool() : 创建固定大小的线程池
ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
ExecutorService newSingleThreadExecutor() : 创建单个线程池。线程池中只有一个线程
ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时的执行任务。
他们之间的区别主要是:缓存队列-核心线程数-最大线程数之间的关系。
当需要加入进程时:
(1)当前线程数小于核心线程数,当前线程直接运行。
(2)当前线程数大于核心线程数,当前线程会加入到阻塞队列中,
(3)此时阻塞队列未满,直接加入,等待机会运行。
(4) 此时阻塞队列已满,但此时线程数小于最大线程数,则直接创建线程运行。
(5)此时线程数大于等于最大线程数,则实行线程池自定义的拒绝策略。
线城池的拒绝策略(四种):
AbortPolicy — 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException异常
CallerRunsPolicy — 当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。
DiscardOldestPolicy — 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
DiscardPolicy — 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。
相关推荐
3.ESP32S3 AP 配网开发实战:HTTP 与 WebSocket 协议实现
本文介绍了基于ESP32S3的AP配网实现方案,通过HTTP协议提供配网网页,利用WebSocket实现双向通信。详细解析了HTTP和WebSocket协议特点,阐述了SPIFFS文件系统存储HTML网页的方法,包括分区表配置、CMakeLists设置和代码实现。工程采用模块化设计,包含WiFi管理、Web服务器、IO扩展等组件,支持手机浏览器直接配网。测试验证了从AP热点连接到路由器切换的全流程,并总结了SPIFFS操作、WebSocket通信等核心优化点。该方案无需专用APP,适合物联网设备快速部署场景
线程池核心线程数和最大线程数总结
核心线程数配置个数:看IO密集型,还是CPU密集型 (1)一般平时cpu使用率4%以下,都是IO密集型,IO密集型具体看实践,目前项目里核心线程数设置50,最大线程数可以和核心线程数相同,队列配置大一些,使永远触发不到最大线程数 (2)如果是大量计算CPU使用率过高,属于CPU密集型,CPU密集型以4C8G为例,核心线程数一般设置4,最大线程数可以和核心线程数相同,队列配置大一些,使永远触发不到最大线程数 核心线程数永远不会销毁,和线程池生命周期一样, 除非核心线程shutdown ...
RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)
前言 在学习OTA之前,请先参考上两篇博客写的关于SPI设备及W25Q128的使用方法,传送门: https://blog.youkuaiyun.com/tigerots/article/details/107423633 https://blog.youkuaiyun.com/tigerots/article/details/107933991 如何使用OTA 一. 制作BootLoader 打开Bootloader 在线获取地址,注册,并根据RT-thread官方文档生成BootLoader,官方文档已经写的很清楚,再此
什么是CPU密集型?什么是IO密集型?
1、CPU密集型 CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你开几个模拟的多线程该任务都不可能得到加速,因为CPU总的运算能力就那些
常见的电容有哪些
电容在电路板中非常常见,类别纷繁复杂,本文化繁为简,主要介绍下常见电容。
STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)
STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)前言一、Flash划分boot和App二、使用步骤1.引入库2.读入数据总结 前言 用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导
0.9.2、线程池——核心线程数、阻塞队列、最大线程数之间的关系
文章目录线程池内部运行过程验证思路确保先提交的任务优先被线程池处理确保执行的任务占有足够久的线程池资源可观测的阻塞队列大小充分的信息代码自定义线程池结果结论基本几结论新任务提交在线程池内部处理的优先级 线程池内部运行过程 线程池的初始参数中包含 核心线程数、最大线程数、线程池线程空闲回收时间、阻塞队列、线程工厂、拒绝策略。 那么线程池是如何管理线程和阻塞队列的关系呢? 验证思路 确保先提交的任务优先被线程池处理 多线程执行本身是无序的,原因在于并发操作下,后面提交的任务也可能被先运行,因此,为了确保先提交的
YOLOv11 网络结构详解:一文看懂 Backbone、Head、C3k2、SPPF 和 Detect 检测头
在使用 YOLOv11 进行目标检测时,我们经常会接触到或这样的模型配置文件。backbone和head分别是什么意思?ConvC3k2SPPFC2PSA这些模块分别起什么作用?P3/8、P4/16、P5/32 代表什么?为什么最后 Detect 要同时接收 3 个不同尺度的特征图?YOLOv11n、YOLOv11s、YOLOv11m、YOLOv11l、YOLOv11x 的区别在哪里?
线程池设置多少合适
综合来看,我们可以根据自己的业务场景,从“N+1”和“2N”两个公式中选出一个适合的,计算出一个大概的线程数量,之后通过实际压测,逐渐往“增大线程数量”和“减小线程数量”这两个方向调整,然后观察整体的处理时间变化,最终确定一个具体的线程数量。这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。混合型:核心线程数=(线程等待时间/线程CPU时间+1)*CPU核心数。
【漏洞复现】CVE-2024-44902 Thinkphp反序列化漏洞
Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。
通过Robotstudio修改机器人程序的具体方法和步骤
通过Robotstudio修改机器人程序的具体方法和步骤
全面了解ThreadPoolExecutor线程池各项参数
全面了解ThreadPoolExecutor线程池
OpenClaw实战-行政与HR必备:AI驱动的办公自动化
智能会议纪要自动生成会议时间智能协调自动提醒和跟进简历智能筛选和匹配度分析面试安排自动化入职办理流程化通知公告一键发布发票识别和报销辅助资产管理数字化让AI处理繁杂的事务性工作,让您有更多时间专注于更有价值的战略和管理任务。
Linux--线程池(包含日志的解释)
对线程池的讲解和使用例程,还有日志的创建和使用
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
【SpringBoot】SpringBoot中使用线程池@EnableAsync
涉及到多线程的使用,总会绕不开一个概念——线程池,关于线程的原理及原始代码实现,这里不讲,网上有很多相关的博客,这里直接来介绍一下在SpringBoot中使用线程池来进行多线程的管理。 1、核心参数介绍 1、CorePoolSize:核心线程数,核心线程会一直存活,即使没有任务需要执行 2、MaxPoolSize:线程池中的最大线程数 3、QueueCapacity:阻塞队列的容量,用来存储等...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
Spring Boot线程池与多线程的最佳实践
使用线程池的好处是提高了程序的并发处理能力,可以有效地控制线程的数量和管理线程的生命周期,避免了频繁创建和销毁线程的开销。同时,使用线程池还可以通过设置线程池参数来控制系统的负载和资源消耗。方法内编写多线程逻辑,可以根据实际需求进行相应的处理。同时,在Spring Boot的配置文件中,配置线程池的相关属性,以满足实际业务需求。欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199。创建一个Spring Boot项目,添加所需的依赖。方法,编写需要在多线程中执行的逻辑。上述代码中,通过注入。
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
使用有界队列的线程池使用DiscardOldestPolicy拒绝策略
public class MyTask implements Runnable { private int taskId; private String taskName; public MyTask(int taskId, String taskName){ this.taskId = taskId; this.taskName = ...
Springboot 多线程异步
当线程池中的线程数量达到核心线程数+并且队列中待执行任务以达到最大容量,如果还有新的任务需要执行,线程池将会创建新的线程,直到达到最大线程数。有10个任务任务需要同时执行,那么会开5核心线程,5个在队列等待,等到前5任务执行成功释放线程,再继续执行队列里的任务。,不同的异步方法需要从不同的线程池中获取线程,那么可以定义多个线程池,在异步方法上指定线程池的名字。当线程池中的线程数量达到最大线程数时,如果还有新的任务要执行,线程池会将这些任务添加到任务队列。
java多线程八股
多线程
java多线程与自定义线程池
1. 多线程的优缺点 优点: 提升cpu使用率 异步处理任务,提升响应速度 缺点: 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能 多线程之间存在数据共享问题,提高技术复杂度 2. java开启多线程 继承Thread类,重写 run() 方法 实现Runnable接口,重写 run() 方法 实现Callable接口,重写 call() 方法 3. 线程池 “..
多线程数据库查询
@Configuration public class AsyncConfig { @Bean public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 设置核心线程数 executor.setCorePoolSize(5); // 设置最大线程数 executor
springboot配置线程池并实现多线程方法调用
配置线程池 @Configuration @EnableAsync public class AsyOrderConfig implements AsyncConfigurer{ @Override @Bean public Executor getAsyncExecutor() { // 获取线程池 – 数据库的连接池 ...
jdk8新特性(Lambda表达式)结合spring 线程池,一行代码实现多线程
1.配置spring 线程池 @Configuration @EnableAsync @ConfigurationProperties(prefix="threadpool") public class ExecutePoolConfiguration { @Value("${threadpool.core-pool-size}") private int corePoolS...
线程池的执行流程
线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。
springboot中起异步线程的线程池配置
springboot中起异步线程的线程池配置 多线程异步调用的使用场景:在复杂业务逻辑中,交易链路过长,使用多线程异步服务来提高效率 1、线程池配置类 package com.fbank.dis_midware.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spr...
线程池ThreadPoolExecutor的深入解析
ThreadPoolExecutor是Java中实现线程池的核心类。它的主要任务是管理线程的创建、调度和资源的回收。通过线程池,我们可以复用已经创建的线程,避免频繁的创建和销毁线程带来的性能损耗。这样一来,程序的响应速度和处理能力都会得到提升。
960



被折叠的 条评论
为什么被折叠?



