← 返回首页

Java 21 虚拟线程 (Project Loom) 生产环境迁移指南

虚拟线程是轻量级线程,极大地减少了在高并发场景下维护线程池的开销。相比传统的 Platform Thread,虚拟线程不再由操作系统直接调度。

迁移注意事项

1. 避免 ThreadLocal 滥用:由于虚拟线程的数量可能达到百万量级,过多的 ThreadLocal 会导致严重的内存溢出风险。

2. Pinning 限制:在 synchronized 块内执行 I/O 操作会导致虚拟线程被固定(Pinned)在载体线程上,建议改用 ReentrantLock

示例代码:

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    IntStream.range(0, 10000).forEach(i -> {
        executor.submit(() -> {
            Thread.sleep(Duration.ofSeconds(1));
            return i;
        });
    });
}