SpringBoot + 虚拟线程,简直鸟枪换大炮~ 📅 发布时间:2026/7/8 14:12:25 👁️ 浏览次数: 什么是虚拟线程虚拟线程是Java19开始增加的一个特性和Golang的携程类似一个其它语言早就提供的、且如此实用且好用的功能作为一个Java开发者早就已经望眼欲穿了。虚拟线程和普通线程的区别“虚拟”线程望文生义它是“假”的它不直接调度操作系统的线程而是由JVM再提供一层线程的接口抽象由普通线程调度即一个普通的操作系统线程可以调度成千上万个虚拟线程。虚拟线程比普通线程的消耗要小得多得多在内存足够的情况下我们甚至可以创建上百万的虚拟线程这在之前(Java19以前)是不可能的。❝其实如果有用过akka的朋友们会发现其实两者很相似只不过使用akka是应用程序来处理而虚拟线程是JVM来处理使用上更简洁且方便。❞SpringBoot使用虚拟线程下面我们会在SpringBoot中使用虚拟线程将默认的异步线程池和http处理线程池替换为虚拟线程然后对比虚拟线程和普通线程的性能差异你会发现差别就像马车换高铁不是一个时代的东西。配置首先我们使用的Java版本是java-20.0.2-oracleSpringBoot版本是3.1.2。要在SpringBoot中使用虚拟线程很简单增加如下配置即可/** * 配置是用于稍后测试spring.virtual-threadtrue是使用虚拟线程false时还是使用默认的普通线程 */ Configuration ConditionalOnProperty(prefix spring, name virtual-thread, havingValue true) publicclass ThreadConfig { Bean public AsyncTaskExecutor applicationTaskExecutor() { returnnew TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor()); } Bean public TomcatProtocolHandlerCustomizer? protocolHandlerCustomizer() { return protocolHandler - { protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); }; } }Async性能对比我们写一个异步service里面睡眠50ms模拟MySQL或Redis等IO操作Service public class AsyncService { /** * * param countDownLatch 用于测试 */ Async public void doSomething(CountDownLatch countDownLatch) throws InterruptedException { Thread.sleep(50); countDownLatch.countDown(); } }最后测试类很简单就是循环调用这个方法10万次计算所有方法执行完成的消耗的时间Test public void testAsync() throws InterruptedException { long start System.currentTimeMillis(); int n 100000; CountDownLatch countDownLatch new CountDownLatch(n); for (int i 0; i n; i) { asyncService.doSomething(countDownLatch); } countDownLatch.await(); long end System.currentTimeMillis(); System.out.println(耗时 (end - start) ms); }普通线程耗时678秒左右超过10分钟了虚拟线程耗时3.9秒!!朋友们接近200倍的性能差距HTTP请求性能对比让我们再看看http请求的对比简单写个get请求里面什么也不做一样睡50ms模拟IO操作RequestMapping(/get) public Object get() throws Exception { Thread.sleep(50); return ok; }然后我们使用jmeter请求接口500个并发线程运行1万次看看效果如何「普通线程」可以看到最小用时50ms这个没毛病接口里面睡眠了50ms但是不管是中位数还是90/95/99线都大于150ms了这是因为系统线程是一个很昂贵的资源SpringBoot中tomcat默认的最大连接数应该是200在连接池的线程被耗尽后这200个线程在那干等50ms结束而剩下的请求也只能等待无法进行其它的操作。下面再看下虚拟线程的表现「虚拟线程耗时」可以看到即使是最大耗时也保持在100ms以下即线程等待时间显著的减少虚拟线程更好的利用了系统资源。总结从上面的性能对比来看虚拟线程在性能方面有明显的优势但是要注意的是我们上面的测试都是让线程等待了50ms这是模拟什么场景没错是IO密集型场景即线程大部分时间是在等待IO这样虚拟线程才可以发挥出它的优势如果是CPU密集型场景那么可能效果并不大。不过我们目前大部分的应用都是IO密集型应用较多比如典型的WEB应用大量的时间在等待网络IODB、缓存、HTTP等等使用虚拟线程的效果还是非常明显的。❝最后大部分的公司可能还在用Java8但是我想说的是是时候升级了跟上时代的脚步吧朋友们❞
视频拼接融合升级 含音频2026 视频拼接 含音频 import cv2 import numpy as np import subprocess import osdef create_distance_feather_mask(size, feather_radius=30):"""创建基于距离场的羽化遮罩"""h, w = sizemask = np.zeros((h, w), dtype=np.float32)# 计算每个像… 2026/5/17 6:48:43
【水下黑科技】如何把前视成像声呐“塞”进微型水下无人机?盘点声呐小型化的前沿技术 【水下黑科技】如何把前视成像声呐“塞”进微型水下无人机?盘点声呐小型化的前沿技术 标签: 前视声呐 | 水下机器人 | 换能器 | 信号处理 | 硬件集成 🌊 行业背景:为什么要让声呐“减肥”? 近年来,微型水下… 2026/5/17 6:48:43
基于Vue.js和springboot线上美术馆艺术品拍卖商城平台67nvaicu 目录 技术架构设计核心功能模块关键实现代码示例性能优化方案安全防护措施部署方案设计测试策略 开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 技术架构设计 采用前后端分离架构,前端使用Vue.js 3.x TypeScript… 2026/5/17 2:34:17
《架构特别篇二:SYSTEM 层》 架构特别篇二:SYSTEM 层 — 硬件抽象的精髓在一张表里换芯片、换底板——只改一个文件 cc_h7_def.h。DMA 8 路串口不打架——靠 dma.c 里的一张映射表。.sct 分散加载——每一块内存放什么,编译期就决定了。这一章讲 SYSTEM 层的三个核心设计。1. cc_h7_def.h&#… 2026/7/9 5:55:22
SAM 与 YOLOv8-seg 性能对比:RTX 4090 实测推理速度、显存占用与分割精度 SAM 与 YOLOv8-seg 性能对比:RTX 4090 实测推理速度、显存占用与分割精度 在计算机视觉领域,图像分割一直是核心任务之一。随着深度学习技术的快速发展,各种分割模型层出不穷。本文将聚焦于当前最受关注的两类模型:Meta 推出的 Se… 2026/7/9 5:55:22
一线团队已全面启用:Cursor inline chat企业级落地手册(含安全沙箱配置、私有模型接入、审计日志埋点) 更多请点击: https://codechina.net 第一章:Cursor inline chat的核心价值与企业级定位 Cursor inline chat 不是简单的代码补全助手,而是嵌入开发工作流深处的智能协作者。它将自然语言交互能力直接耦合到编辑器光标位置,在不中… 2026/7/9 5:55:22
不花钱让NAS秒变发烧级数播!虚拟机部署 Daphile,音质直接起飞 不花钱让NAS秒变发烧级数播!虚拟机部署 Daphile,音质直接起飞哈喽小伙伴们好,我是Stark-C~说到数播(数字音频播放器)很多发烧友都不陌生,如果说“蓝光播放器”是播放高清画面的,而数播就是播放高… 2026/7/9 5:53:21
内行人推荐:10 个供应商关系管理系统,闭眼入不踩坑 选对供应商关系管理系统,采购协同效率能提升 40% 以上。选错了,就是持续投入的无底洞。 很多企业第一次推进采购数字化转型,最容易犯的错就是对着功能清单逐项打勾,比完首期报价就拍板。上线之后才发现业务流程和系统逻辑完全不匹… 2026/7/9 5:51:21
微信QQ聊天缓存把C盘占满怎么清理不丢聊天记录和接收文件 微信和QQ用得久了,C盘经常在不知不觉中被聊天缓存占满。遇到这种情况,正确的顺序是先把还有用的聊天文件挪出来,再处理过期图片、视频、接收文件和各种临时缓存,最后把两款软件的默认保存路径迁到别的分区。软件的整个安装目录不要… 2026/7/9 5:49:21
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08