0

0

什么是Java虚拟线程(Virtual Threads)_Java 19协程Project Loom的千万级并发初探

P粉602998670

P粉602998670

发布时间:2026-03-13 13:36:21

|

964人浏览过

|

来源于php中文网

原创

Virtual Thread 是 JVM 用户态轻量级调度抽象,底层复用平台线程,创建/挂起/唤醒不陷入内核;与普通线程本质区别在于调度开销低、默认 daemon、不继承 ThreadLocal、ID 非 OS 级。

什么是java虚拟线程(virtual threads)_java 19协程project loom的千万级并发初探

Virtual Thread 是什么,和普通 Thread 有啥本质区别

它不是新线程模型,而是 JVM 在用户态做的轻量级调度抽象。底层还是用平台线程(PlatformThread)跑,但 VirtualThread 的创建、挂起、唤醒不进内核,开销接近对象实例化。

常见错误现象:以为开了百万 VirtualThread 就能扛住百万并发请求——其实瓶颈常在数据库连接池、HTTP 客户端复用、或没关闭的 InputStream 上,而非线程本身。

  • VirtualThread 默认是 daemon 线程,主线程退出后自动终止,写 demo 时容易“啥都没打印就结束了”
  • 它不支持 ThreadLocal 的默认行为(值不会自动继承),需显式用 InheritableThreadLocalScopedValue(Java 20+)
  • Thread.currentThread() 返回的是 VirtualThread 实例,但 thread.getId() 是自增 long,不反映 OS 级线程 ID

怎么安全地用 VirtualThread 替换传统线程池

别直接把 Executors.newFixedThreadPool(n) 换成 Executors.newVirtualThreadPerTaskExecutor() 就完事。关键在“任务是否阻塞”和“阻塞是否可中断”。

使用场景:适合大量短生命周期、含 I/O 阻塞(如 HTTP 调用、DB 查询、文件读取)的任务;不适合 CPU 密集型计算(会挤占 carrier 线程,反而降低吞吐)。

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

  • 阻塞调用必须用支持中断的 API:比如用 HttpClient 而非老式 HttpURLConnection,用 CompletableFuture.supplyAsync(..., executor) 显式传入虚拟线程执行器
  • 不要在线程内手动调用 Thread.sleep()Object.wait(),它们会让虚拟线程“卡住” carrier,改用 Thread.sleep(Duration)(Java 19+ 重载)或 ScheduledExecutorService
  • 日志框架若依赖 ThreadLocal(如 MDC),需确认版本是否适配虚拟线程(Logback 1.4+、SLF4J 2.0+ 支持)

VirtualThread 下的异常传播和监控怎么搞

虚拟线程崩溃时,默认不会打印堆栈到控制台,除非你捕获了 UncaughtExceptionHandler 并显式处理。

Nanonets
Nanonets

基于AI的自学习OCR文档处理,自动捕获文档数据

下载

常见错误现象:HTTP 接口偶尔 500,日志里却找不到异常——因为异常发生在虚拟线程里,而默认异常处理器只监听平台线程。

  • 设置全局处理器:

    Thread.setDefaultUncaughtExceptionHandler((t, e) -> {  
      System.err.println("Uncaught in " + t + ": " + e);  
    });
    注意:这个 handler 对所有线程生效,包括虚拟线程。
  • JFR(Java Flight Recorder)支持虚拟线程追踪,但需开启额外事件:-XX:StartFlightRecording=duration=60s,filename=recording.jfr,settings=profile,virtualthreads=true

  • jstackjcmd 默认不显示虚拟线程,要用 jcmd <pid> VM.native_memory summary 结合 JFR 分析,而不是靠线程 dump 数数量

虚拟线程的“千万级”是理论调度能力,实际压测时最容易被忽略的,是 carrier 线程数配置(-XX:MaxJavaStackTraceDepth 影响不大,但 -XX:ActiveProcessorCount 和 OS 层的 ulimit -u 才真卡脖子)。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1948

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

658

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2401

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

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

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

443

2023.07.18

堆和栈区别
堆和栈区别

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

605

2023.08.10

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

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

443

2023.07.18

堆和栈区别
堆和栈区别

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

605

2023.08.10

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

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

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 81.5万人学习

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

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