DevForge · Java

虚拟线程的五个隐藏陷阱

2026-07-09 · 9 min · Project Loom

Project Loom 让「一个请求一个线程」重新变得廉价,但很多老代码在虚拟线程下反而会变慢甚至死锁。下面是最常见的五个坑。

第一,synchronized 会 pin 住载体线程(carrier thread),高并发时调度器被拖垮——改用 ReentrantLock。第二,Thread Local 在百万级虚拟线程下内存暴涨。第三,native 方法调用同样会 pin 线程。第四,依赖线程池大小的限流逻辑在新模型下失效。第五,被第三方库里的同步阻塞偷偷卡住。

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
  executor.submit(() -> doWork()); // 注意避免 synchronized 临界区
}

迁移前先用 -Djdk.tracePinnedThreads=full 跑一遍,把 pin 点全部暴露出来再动手。

← 返回首页