news 2026/4/23 17:20:00

Java 25 中的虚拟线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 密集场景,避免长时间阻塞操作,配合监控指标可最大化发挥虚拟线程的性能优势。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:19:38

数据泄露赃款的洗白链条与安全团队的生死盲区

稳定币凭借低波动、高流通、跨境瞬时到账、匿名性强等特性&#xff0c;早已成为网络犯罪集团洗白数据泄露赃款的“核心工具”。从企业核心数据窃取勒索&#xff0c;到个人信息贩卖变现&#xff0c;黑客的每一笔非法收益&#xff0c;都能通过稳定币的链上流转快速“漂白”&#…

作者头像 李华
网站建设 2026/4/23 10:19:38

从“被动防御”到“主动免疫”:安全设计的核心原则与实践

在数字化浪潮席卷全球的今天&#xff0c;网络攻击的频率、强度和隐蔽性正以指数级增长。传统的“防火墙杀毒软件”被动防御模式&#xff0c;早已难以应对APT攻击、零日漏洞利用、供应链投毒等新型威胁。当攻击从“偶然入侵”变成“常态化渗透”&#xff0c;安全设计的理念必须从…

作者头像 李华
网站建设 2026/4/23 10:19:38

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

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

作者头像 李华
网站建设 2026/4/23 11:53:28

自动驾驶十年演进

下面给你一条从工程现实、系统能力与规模化落地视角出发的 「自动驾驶十年演进路线&#xff08;2025–2035&#xff09;」。 我会刻意避开“L5 神话”&#xff0c;聚焦哪些能力真的会发生跃迁、为什么、以及工程上意味着什么。一、核心判断&#xff08;一句话&#xff09;未来十…

作者头像 李华
网站建设 2026/4/23 11:53:25

通用十年演进母模型

一个**“通用十年演进母模型”**&#xff0c;可以套在任何复杂技术系统上。十年演进的通用结构&#xff08;适用于机器人 / 自动驾驶 / AI / 平台&#xff09;所有复杂系统的十年演进&#xff0c;本质只有一条主线&#xff1a; 从“能用” → “可控” → “自治”。一、三阶段…

作者头像 李华
网站建设 2026/4/23 9:50:15

电力线温度在线监测装置设计与实现(有完整资料)

资料查找方式&#xff1a; 特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可 编号&#xff1a; T4472405M 设计简介&#xff1a; 本设计是基于STM32的电力线温度在线监测装置&#xff0c;主要实现以下功能&#xff1a; 1.通过温度传感器检测电线…

作者头像 李华