当前位置: 首页 > news >正文

Java 21 虚拟线程

一、虚拟线程作用

1. 资源高效:可创建数百万个虚拟线程而不会耗尽系统资源(传统线程通常限制在数千个)。

2. 简化并发模型:允许开发者用同步阻塞的代码风格(Thread.sleep()、I/O 等待)编写高并发应用,无需回调地狱或复杂异步 API。

3. 提升吞吐量:特别适合高并发 I/O 型应用(如 Web 服务、数据库访问),线程阻塞时自动释放载体线程,最大化 CPU 利用率。

4. 无缝兼容:与现有 java.lang.Thread API 兼容,无需重写代码。

二、代码示例

import java.util.concurrent.*;public class VirtualThreadDemo {public static void main(String[] args) throws InterruptedException {// 1. 创建虚拟线程执行任务Thread virtualThread = Thread.ofVirtual().start(() -> {System.out.println("Hello from virtual thread: " + Thread.currentThread().threadId());});virtualThread.join(); // 确保虚拟线程执行完成// 2. 添加时间测量和结果处理long startTime = System.currentTimeMillis();try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {// 使用Future收集结果(演示用100个任务)Future<?>[] futures = new Future[100];for (int i = 0; i < futures.length; i++) {final int taskId = i;futures[i] = executor.submit(() -> {try {// 模拟I/O操作Thread.sleep(10);return "Task-" + taskId + " (Thread: " + Thread.currentThread().threadId() + ")";} catch (InterruptedException e) {Thread.currentThread().interrupt();return "Task-" + taskId + " interrupted";}});}// 3. 获取并打印部分结果for (int i = 0; i < 5; i++) { // 仅打印前5个结果System.out.println("Result: " + futures[i].get());}// 4. 等待所有任务完成for (Future<?> future : futures) {future.get(); // 确保所有任务完成}} catch (ExecutionException e) {e.printStackTrace();}// 5. 打印执行时间System.out.println("Total time: " + (System.currentTimeMillis() - startTime) + " ms");}
}

 

三、与传统线程相比

特性虚拟线程传统平台线程
资源占用~ 1KB内存/线程~ 1MB内存/线程
创建数量百万级数千(受OS限制)
阻塞成本近乎零开销(自动释放载体线程)高(OS上下文切换)
调度器JVM管理操作系统内核管理
适用场景高并发I/O任务CPU密集型计算
堆栈存储位置Java堆内存OS内存
监控与调试支持JFR和JStack传统工具支持

http://www.dtcms.com/a/276246.html

相关文章:

  • 浏览器宏任务的最小延时:揭开setTimeout 4ms的神话
  • java中的main方法
  • window7,windows10,windows11种系统之间实现打印机共享
  • 创客匠人:从定位逻辑看创始人 IP 如何驱动 IP 变现
  • CompareFace使用
  • Kimi K2万亿参数开源模型原理介绍
  • 【读书笔记】《C++ Software Design》第二章:The Art of Building Abstractions
  • Ruby如何采集直播数据源地址
  • OpenEuler操作系统中检测插入的USB设备并自动挂载
  • 【数据结构】反射、枚举 和 lambda表达式
  • Golang 面向对象(封装、继承、多态)
  • 【C语言】指针进阶:指针和数组
  • 手把手教你用YOLOv10打造智能垃圾检测系统
  • 第七章应用题
  • Geant4 安装---Ubuntu
  • 一篇博客学习Lua_安装使用+语法详解
  • Lua ADB 接口文档
  • RMSNorm实现
  • 2.单例模式
  • Vim的magic模式
  • blender uv小技巧
  • Python 包管理新时代:深入了解 `uv` 的使用与实践
  • OpenVela之模拟器调试
  • 【kubernetes】--Controller(StatefulSet)
  • 【PTA数据结构 | C语言版】链式队列的3个操作
  • Git常用命令一览
  • pyqt5界面开发学习
  • 034_多态的实现(编译时 / 运行时)
  • 洛谷 P11961 [GESP202503 五级] 原根判断-提高+/省选-
  • Vue工程化