虚拟线程是 Java 21 正式引入的轻量级用户态线程,核心优势是低开销、高并发、支持同步编程模型实现异步性能。下面将从前提准备、基础用法、进阶用法、实战场景、注意事项五个方面详细讲解具体使用方式。
一、使用前提
- Java 版本要求:必须使用 Java 21 及以上版本(Java 19/20 为预览特性,需通过
--enable-preview启用,不推荐生产环境使用)。
编译运行说明:若使用 Java 19/20(预览版),编译和运行时需添加 --enable-preview 参数:
# 编译
javac --enable-preview -source 20 VirtualThreadDemo.java
# 运行
java --enable-preview VirtualThreadDemo
环境验证:通过以下命令验证 Java 版本,确保满足要求:
java -version
# 预期输出(示例):openjdk version "21.0.1" 2023-10-17 LTS
二、基础用法:创建与启动虚拟线程
虚拟线程的创建和启动方式简洁,支持多种写法,核心 API 位于 java.lang.Thread 类中。
1. 方式 1:直接启动(静态方法快捷创建)
使用 Thread.startVirtualThread(Runnable) 直接创建并启动虚拟线程,无需手动调用 start() 方法,是最简单的使用方式。
public class VirtualThreadBasicDemo1 {
public static void main(String[] args) throws InterruptedException {
// 1. 启动单个虚拟线程
Thread.startVirtualThread(() -> {
// 虚拟线程执行的业务逻辑(支持同步阻塞操作)
System.out.printf("虚拟线程 1 执行中,线程 ID:%s,是否为虚拟线程:%b%n",
Thread.currentThread().threadId(), Thread.currentThread().isVirtual());
try {
// 模拟 I/O 阻塞(虚拟线程阻塞时会释放载体线程,不占用内核资源)
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println();
});
( ; i <= ; i++) {
i;
Thread.startVirtualThread(() -> {
System.out.printf(, threadNum, Thread.currentThread().threadId());
{
Thread.sleep();
} (InterruptedException e) {
(e);
}
System.out.printf(, threadNum);
});
}
Thread.sleep();
System.out.println();
}
}


