CS-Notes 学习笔记
面试最常问Java 后端 · 操作系统

协程和线程有什么区别?Java 的虚拟线程是怎样实现的?

先自己想一想,再看参考要点

参考要点

  • 协程在用户态由运行时调度,Go 和 Java 虚拟线程把大量协程映射到少量线程上(M:N),Python asyncio 则在一个线程的事件循环中执行,切换不陷入内核、内存占用小,可以大量创建,但同一线程上的协程不能并行
  • 虚拟线程是 JVM 实现的有栈协程,由 ForkJoinPool 的平台线程(默认等于 CPU 核数)执行,阻塞 I/O 时卸载,栈帧以栈块对象存入堆,就绪后再挂载到某个平台线程继续执行
  • JDK 21 中在 synchronized 内阻塞无法卸载,JDK 24 起基本消除
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。