Java 25 中的虚拟线程

一、Java 25 虚拟线程核心定位

虚拟线程(Project Loom 核心特性)自 Java 19 预览、Java 21 正式发布后,Java 25 并未新增颠覆性功能,而是聚焦调度优化、稳定性提升、场景适配,让虚拟线程在生产环境中更易用、更高效。

二、Java 25 虚拟线程的核心优化

1. 调度策略优化(核心改进)
  • 问题背景:Java 21-24 中,虚拟线程默认采用 “抢占式 + 协作式” 混合调度,但在高并发 IO 场景下,部分虚拟线程可能因长时间占用载体线程(Carrier Thread)导致调度延迟。
  • Java 25 优化
    • 引入自适应调度阈值:JVM 会根据系统负载(CPU/IO 使用率)动态调整虚拟线程的抢占阈值,避免单个虚拟线程长时间占用载体线程;
    • 优化载体线程池复用:减少载体线程的创建 / 销毁开销,尤其在虚拟线程频繁创建 / 终止的场景下,CPU 使用率降低约 5%-10%(官方测试数据);
    • 支持显式调度提示:新增Thread.VirtualThreadSchedulerHint枚举,可通过Thread.ofVirtual().schedulerHint(hint).start()为虚拟线程指定调度优先级(如 IO 密集型、CPU 密集型),JVM 会针对性调度。
2. 调试与监控增强
  • 完善 JDK 工具链支持:jstackjcmd可更清晰区分虚拟线程和平台线程,输出虚拟线程的调度状态(如 “等待 IO”“抢占中”);
  • 新增 MBean 监控指标:通过 JMX 可获取虚拟线程的创建总数、活跃数、调度延迟、载体线程利用率等核心指标,便于生产环境监控;
  • 优化异常栈追踪:虚拟线程抛出异常时,栈轨迹会标注 “VirtualThread” 标识,且不再包含冗余的载体线程信息,定位问题更高效。
3. 兼容性与稳定性提升
  • 修复虚拟线程与ThreadLocal的冲突:解决 Java 21 中部分场景下ThreadLocal内存泄漏问题,虚拟线程终止时会立即清理绑定的ThreadLocal数据;
  • 优化虚拟线程与锁的交互:虚拟线程等待synchronized锁时,不再阻塞整个载体线程,而是暂时让出载体线程给其他虚拟线程执行;
  • 支持虚拟线程的 “暂停 / 恢复”:新增Thread#suspendVirtual()Thread#resumeVirtual()方法(仅对虚拟线程生效),安全控制虚拟线程执行状态(平台线程的suspend()仍标记为废弃)。

三、Java 25 虚拟线程使用示例

1. 基础创建与调度提示

java

运行

import java.util.concurrent.Executors; public class VirtualThread25Demo { public static void main(String[] args) throws InterruptedException { // 1. 创建带调度提示的虚拟线程(IO密集型) Thread ioVirtualThread = Thread.ofVirtual() .schedulerHint(Thread.VirtualThreadSchedulerHint.IO_BOUNDED) // 指定IO密集型 .unstarted(() -> { // 模拟IO操作(如网络请求、文件读写) try { Thread.sleep(1000); // 虚拟线程sleep不会阻塞载体线程 System.out.println("IO任务完成:" + Thread.currentThread()); } catch (InterruptedException e) { throw new RuntimeException(e); } }); // 2. 创建CPU密集型虚拟线程 Thread cpuVirtualThread = Thread.ofVirtual() .schedulerHint(Thread.VirtualThreadSchedulerHint.CPU_BOUNDED) .unstarted(() -> { // 模拟CPU密集计算 long sum = 0; for (long i = 0; i < 1_000_000_000; i++) { sum += i; } System.out.println("CPU任务完成,sum=" + sum); }); // 启动虚拟线程 ioVirtualThread.start(); cpuVirtualThread.start(); // 等待完成 ioVirtualThread.join(); cpuVirtualThread.join(); // 3. 线程池方式(推荐生产环境使用) try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { // 批量提交1000个虚拟线程任务 for (int i = 0; i < 1000; i++) { int taskId = i; executor.submit(() -> { Thread.sleep(500); System.out.println("批量任务" + taskId + "完成,线程:" + Thread.currentThread()); }); } } // 自动关闭线程池 } }
2. 暂停 / 恢复虚拟线程

java

运行

public class VirtualThreadSuspendDemo { public static void main(String[] args) throws InterruptedException { Thread vt = Thread.ofVirtual().start(() -> { while (!Thread.currentThread().isInterrupted()) { System.out.println("虚拟线程运行中..."); try { Thread.sleep(500); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); // 运行2秒后暂停 Thread.sleep(2000); vt.suspendVirtual(); // 暂停虚拟线程 System.out.println("虚拟线程已暂停"); // 3秒后恢复 Thread.sleep(3000); vt.resumeVirtual(); // 恢复虚拟线程 System.out.println("虚拟线程已恢复"); // 2秒后中断 Thread.sleep(2000); vt.interrupt(); vt.join(); System.out.println("虚拟线程已终止"); } }

四、关键注意事项

  1. 适用场景:Java 25 虚拟线程仍最适合IO 密集型场景(如微服务接口、数据库访问、网络请求),CPU 密集型场景优势不明显(仍推荐平台线程);
  2. 避免阻塞操作:虽然优化了锁交互,但虚拟线程中仍应避免长时间阻塞(如synchronized锁持有超 1 秒、死循环),否则仍会占用载体线程;
  3. 监控关键指标:生产环境需监控jdk.virtualThreads.activeCount(活跃虚拟线程数)、jdk.virtualThreads.schedulingDelay(调度延迟),避免调度瓶颈;
  4. 兼容性:Java 25 虚拟线程完全兼容 Java 21 的 API,原有虚拟线程代码无需修改即可直接运行,且性能更优。

总结

  1. Java 25 对虚拟线程的升级以优化调度、增强监控、提升稳定性为主,无破坏性变更,向下兼容 Java 21 代码;
  2. 核心改进集中在 IO 密集型场景的调度效率,以及生产环境的可观测性,让虚拟线程更适合大规模落地;
  3. 使用时仍需聚焦 IO 密集场景,避免长时间阻塞操作,配合监控指标可最大化发挥虚拟线程的性能优势。

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

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

相关文章

Flink 读 Parquet RowData / Avro(Generic/Specific/Reflect)+ FileSource 批流一体 + PyFlink 依赖

1. 依赖准备&#xff1a;flink-parquet 与 parquet-avro 1.1 Java&#xff1a;读取 Parquet 的基础依赖 要在 Flink 里读取 Parquet&#xff0c;你需要加 flink-parquet&#xff1a; <dependency><groupId>org.apache.flink</groupId><artifactId>flin…

深度测评10个AI论文平台,自考学生轻松搞定毕业论文!

深度测评10个AI论文平台&#xff0c;自考学生轻松搞定毕业论文&#xff01; 自考路上的得力助手&#xff1a;AI论文工具如何改变你的写作方式 在自考学习过程中&#xff0c;撰写毕业论文往往是最让人头疼的一环。面对复杂的选题、繁重的文献整理以及反复修改的要求&#xff0c;…

深度复盘----计算机专业读了四年,我才明白这 5 个残酷真相(拒绝精神内耗)

摘要&#xff1a;很多计算机专业的同学从大一开始就陷入了“内卷”与“迷茫”的叠加态。学了 C 语言不懂指针&#xff0c;学了 Java 不懂高并发&#xff0c;天天去图书馆却写不出一个像样的项目。本文是我对计算机学习之路的深度复盘&#xff0c;分享 5 个我希望大一就能知道的…

高效学习----告别“视频收藏夹吃灰”!计算机专业如何建立“输出倒逼输入”的学习闭环?

摘要&#xff1a;你是否也收藏了几个 G 的视频教程却从未打开&#xff1f;是否在此刻觉得自己“学废了”&#xff0c;过两天又全忘了&#xff1f;本文不谈鸡汤&#xff0c;只谈方法论。教你如何利用“费曼技巧”和“开源思维”&#xff0c;构建一套杀手级的高效技术学习体系。&…

Flink JSON 序列化/反序列化 Schema KafkaSource/KafkaSink + 自定义 ObjectMapper + PyFlink Row

1. JsonDeserializationSchema&#xff1a;KafkaSource 中反序列化 POJO JsonDeserializationSchema 实现了 Flink 的 DeserializationSchema&#xff0c;因此只要某个 connector 支持 DeserializationSchema&#xff0c;你就能直接使用它。 典型用法&#xff1a;KafkaSource…

【项目管理】项目管理流程文件(PPT)

1、项目启动2、制定项目计划3、项目执行4、项目监控5、项目收尾软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用…

火焰识别,火焰检测,火灾检测,基于yolov5的火焰检测,可以检测视频和图片,视频实时检测,将训练好的模型部署到英伟达边缘计算 基于 YOLOv5 的高精度、高帧率火焰检测系统

火焰识别&#xff0c;火焰检测&#xff0c;火灾检测&#xff0c;基于yolov5的火焰检测&#xff0c;可以检测视频和图片&#xff0c;也可视频实时检测&#xff0c;检测准确率高&#xff0c;帧率很高&#xff0c;有标注好的训练数据集可以自己重新训练。 可以将训练好的模型部署…

学长亲荐2026 MBA必用TOP10 AI论文工具测评

学长亲荐2026 MBA必用TOP10 AI论文工具测评 2026年MBA学术写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术在学术领域的广泛应用&#xff0c;MBA学生和研究者在论文写作、数据分析、文献综述等环节中&#xff0c;越来越依赖AI工具提升效率与质量。然而…

期刊论文投稿快人一步!虎贲等考 AI 解锁学术发表 “加速器”

在学术发表竞争日趋激烈的当下&#xff0c;一篇优质期刊论文的诞生&#xff0c;往往要历经选题打磨、文献梳理、数据论证、格式校准等重重关卡。很多科研人明明手握扎实的研究成果&#xff0c;却因论文写作不规范、逻辑不严谨、格式不达标&#xff0c;屡屡在投稿环节碰壁。虎贲…

还在为降重降 AIGC 抓狂?虎贲等考 AI:学术改写天花板,两步搞定合规论文

查重率飙红、AIGC 检测亮灯&#xff0c;堪称学术写作的 “双重暴击”&#xff01;不少同学吐槽&#xff1a;“改了十遍重复率还是超标”“AI 写的内容一眼被识破”“降重后语句不通&#xff0c;逻辑全乱”。别慌&#xff01;虎贲等考 AI 智能写作平台&#xff08;官网&#xff…

PetaLinux工程目录设备树文件结构与作用

设备树文件列表 wpfminglie:~/petalinux/ant$ find . \( -path ./build -o -path ./tmp -o -path ./out -o -path ./components/yocto \) -prune -o -type f \( -name "*.dts" -o -name "*.dtsi" \) -print ./components/plnx_workspace/device-tree/devic…

机器人诊断系统十年演进

下面给你一条专门针对机器人系统的 「机器人诊断系统十年演进路线&#xff08;2025–2035&#xff09;」。 这里的“诊断系统”不是简单的“查日志、看告警”&#xff0c;而是机器人如何理解自身失效、判断风险、选择修复策略&#xff0c;并在长期运行中避免重复犯错。一、核心…

智能巡检车、无人机道路检测、AI 路况分析平台 智慧交通 驾驶视角道路病害缺陷检测数据集 建立基于深度学习框架YOLOV8道路病害缺陷检测系统 裂纹 网快 坑洼

道路缺陷检测数据集使用labelimg标注&#xff0c;标签的格式是txt格式&#xff0c;适用于yolo目标检测系列所有版本训练数据集。 标注了&#xff08;裂纹&#xff08;Crack&#xff09;、 检查井&#xff08;Manhole&#xff09;、 网&#xff08;Net&#xff09;、 裂纹块&…

ECC错误

保护机制误差校正码Error Correcting CodeECC可以防止存储在内存中的数据出现错误&#xff0c;提高系统的功能安全性&#xff0c;避免因读取错误的数据而导致错误。ECC的主要影响是在易失性存储器&#xff08;RAM&#xff09;中&#xff0c;其中技术的小型化导致更高的位翻转风…

机器人感知技术十年演进

下面给你一条专门聚焦机器人感知&#xff08;Perception&#xff09;的 「机器人感知技术十年演进路线&#xff08;2025–2035&#xff09;」。 我会刻意避开“更高精度、更大模型”的表层叙事&#xff0c;直指感知在真实世界长期运行中真正要解决的问题。一、核心判断&#xf…

使用C#控制台批量删除 Unity目录里的 .meta文件

因为Unity会生成.meta文件,有的时候比如我 SteamingAssets里面有很多视频文件 是.mp4格式的,某些原因我需要将里面的所有视频文件改为.webm格式,那么会残留很多 .meta文件我们可以创建一个控制台,批量删除class Program {static void Main(string[] args){if (args.Length 0 |…

机器人日志十年演进

下面给你一条专门针对机器人系统的 「机器人日志十年演进路线&#xff08;2025–2035&#xff09;」。 这里的“日志”不是简单的 printf&#xff0c;而是机器人如何记住自己做过什么、为什么这么做、以及如何避免重蹈覆辙。一、核心判断&#xff08;一句话&#xff09;未来十年…

全方位CRM源码系统功能详解,完全开源,支持个性化定制

温馨提示&#xff1a;文末有资源获取方式 随着市场竞争加剧&#xff0c;企业销售团队亟需一套高效工具来管理客户关系和优化销售流程。一款专为销售团队设计的CRM客户关系管理系统源码应运而生&#xff0c;它集成了多种实用功能&#xff0c;帮助企业实现客户数据整合、商机追踪…

机器人诊断十年演进

下面给你一条专门针对机器人系统的 「机器人诊断十年演进路线&#xff08;2025–2035&#xff09;」。 这里的“诊断”不是 IT 意义上的排错&#xff0c;而是机器人在真实世界中如何理解自身失效、判断风险、选择修复策略&#xff0c;并避免重复犯错。一、核心判断&#xff08;…

亲测好用10个AI论文网站,专科生毕业论文轻松搞定!

亲测好用10个AI论文网站&#xff0c;专科生毕业论文轻松搞定&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今的学术环境中&#xff0c;AI 工具正逐渐成为学生和研究者的重要助手。对于专科生而言&#xff0c;撰写一篇符合要求的毕业论文往往是一项挑战。而 AI 降重工…