并发 · 单选题 · 第 21 题
Java 后端开发面试 · 第 21 题
关于 JDK 21 正式推出的虚拟线程,下列说法正确的是?
- A由 JVM 调度,挂载在少量平台线程上;遇到阻塞 IO 会卸载,适合大量 IO 密集型任务
- B每个虚拟线程都一一对应一个操作系统线程,只是创建它的 API 比平台线程更简单
- C主要用于 CPU 密集型计算,能让计算任务突破 CPU 核数的限制获得更高的算力
- D使用虚拟线程时必须用池化的方式复用它们,否则频繁创建的开销会拖垮整个应用
答案
A A. 由 JVM 调度,挂载在少量平台线程上;遇到阻塞 IO 会卸载,适合大量 IO 密集型任务
解析
虚拟线程很轻,可以创建上百万个,阻塞时 JVM 把它从载体线程上卸下,载体线程去跑别的虚拟线程,于是可以用同步写法获得接近异步的吞吐。CPU 密集型任务不会因此变快,因为真正干活的还是有限的 CPU 核。虚拟线程创建成本低,推荐每个任务新建一个,不要池化。JDK 21 中在 synchronized 块内阻塞会把载体线程钉住(pinning),JDK 24 已解决这个问题。