为何Java虚拟线程仍被表述为在OS线程上运行?
关于Java虚拟线程运行载体的疑问解答
你提到的两种表述其实完全一致,核心是要理清平台线程(Platform Thread)和操作系统线程(OS Thread)的关系:
- 平台线程是Java运行时对操作系统线程的直接包装,每个平台线程底层都绑定一个真实的OS线程,由操作系统负责调度。
- 虚拟线程的代码执行必须挂载到平台线程上,而平台线程对应着OS线程,所以说“虚拟线程仍在OS线程上运行代码”和“虚拟线程挂载到平台线程运行”是同一逻辑的不同表述。
额外补充个关键细节:虚拟线程不会持续占用平台线程。当它遇到IO阻塞、锁等待等操作时,Java运行时会把它从绑定的平台线程上卸载,让这个平台线程可以去执行其他虚拟线程;等阻塞状态结束后,虚拟线程会被重新挂载到某个平台线程上继续执行。这种灵活的挂载/卸载机制正是虚拟线程轻量、高吞吐量的核心,但无论何时,它的代码执行最终都依托于OS线程(通过平台线程这个中间层)。
内容的提问来源于stack exchange,提问作者Jackdear
相关产品推荐
相关产品推荐

