Streams 中级

使用虚拟线程执行器实现无限轻量并发。

✕ Java 8
ExecutorService exec =
    Executors.newFixedThreadPool(10);
try {
    futures = tasks.stream()
        .map(t -> exec.submit(t))
        .toList();
} finally {
    exec.shutdown();
}
✓ Java 21+
try (var exec = Executors
        .newVirtualThreadPerTaskExecutor()) {
    var futures = tasks.stream()
        .map(exec::submit)
        .toList();
}
发现此代码有问题? 告诉我们。
♾️

无需调整大小

无需调整池大小——按需创建任意数量的线程。

轻量级

每个虚拟线程的内存占用仅为千字节。

🔧

熟悉的 API

与现有 ExecutorService 代码无缝配合。

旧方式
固定线程池
现代方式
虚拟线程执行器
自 JDK
21
难度
中级
虚拟线程执行器
可用

自 JDK 21 LTS 起广泛可用(2023 年 9 月)

虚拟线程执行器为每个任务创建新的虚拟线程。无需调整池大小——JVM 根据需要管理虚拟线程,开销极低。

分享 𝕏 🦋 in