0

0

什么是Java虚拟线程(Virtual Threads)_Java 21轻量级高并发新特性初探

P粉602998670

P粉602998670

发布时间:2026-03-17 16:02:31

|

688人浏览过

|

来源于php中文网

原创

虚拟线程是JVM用户态调度抽象,不绑定OS线程,支持百万级并发但禁阻塞和CPU密集;平台线程直映OS线程,栈大且受限;需用Thread.ofVirtual()或newVirtualThreadPerTaskExecutor()创建,禁用join()和传统阻塞IO。

什么是java虚拟线程(virtual threads)_java 21轻量级高并发新特性初探

Java虚拟线程不是“新线程实现”,而是JVM在用户态做的调度抽象——它不绑定OS线程,所以能轻松创建百万级并发任务,但代价是不能长期阻塞、不适用CPU密集型场景。

虚拟线程和普通线程到底差在哪

关键区别不在API,而在调度模型:Thread.start() 创建的平台线程(Platform Thread)直接映射到OS线程,受系统线程数限制;而 Thread.ofVirtual().start() 创建的虚拟线程由JVM在少量平台线程上协作式调度,类似协程。

  • 平台线程:每个线程占用1MB栈空间,默认栈大小不可动态调整,OutOfMemoryError: unable to create new native thread 很常见
  • 虚拟线程:默认栈仅几KB,按需增长,生命周期由JVM管理,退出后资源自动回收
  • 不能混用阻塞调用:比如在虚拟线程里调用 Thread.sleep(1000) 会挂起整个载体平台线程,导致其他虚拟线程“假死”

怎么安全地启动和使用虚拟线程

必须通过 Thread.BuilderExecutors.newVirtualThreadPerTaskExecutor() 启动,直接 new Thread(Runnable) 仍创建平台线程。

  • 推荐方式:Thread.ofVirtual().unstarted(runnable).start() —— 显式、可控、语义清晰
  • 批量任务首选:ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); executor.submit(runnable);
  • 避免手动 join():虚拟线程不支持 Thread.join() 阻塞等待,应改用 CompletableFuture 或结构化并发(如 StructuredTaskScope
  • 调试时注意:jstack 默认不显示虚拟线程,需加 -XX:+UnlockDiagnosticVMOptions -XX:+PrintConcurrentLocks 或用 JFR 录制

哪些代码会悄悄让虚拟线程“变重”

虚拟线程一旦执行阻塞IO或同步原语,JVM会将其“挂起并移交”给平台线程池处理,失去轻量优势,甚至引发线程饥饿。

比格设计
比格设计

比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器

下载

立即学习Java免费学习笔记(深入)”;

  • 危险操作:Object.wait()synchronized 块内耗时过长、Thread.sleep()、传统 java.io 流读写(非NIO)
  • 安全替代:java.nio.channels.AsynchronousFileChannelHttpClient 的异步API、ReentrantLock.lockInterruptibly() + 超时控制
  • 日志陷阱:SLF4J + Logback 默认使用同步Appender,高并发下会成为瓶颈,建议切换为 AsyncAppender 或 Log4j2 的无锁异步模式

真正难的不是写对第一行 Thread.ofVirtual(),而是识别出所有隐式阻塞点——尤其在复用老代码、中间件或三方SDK时,它们往往没为虚拟线程做过适配。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

184

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

806

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

102

2025.12.01

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

1

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

0

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

1

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号