一、前言
- 协程(Coroutine) 是一种轻量级的并发编程模型,允许在单线程内通过协作式多任务调度实现并发。
- 由用户代码显式控制(用户态调度而非操作系统内核调度),避免了线程上下文切换的开销,适合高并发、I/O密集型任务。
- 协程可以理解为一种轻量级线程,它允许在执行中暂停并在之后恢复执行,而无需阻塞线程。
二、协程与线程的区别

三、Java对协程的支持
1.传统局限
- Java 标准线程(java.lang.Thread)基于操作系统线程,资源消耗大,难以支撑大规模并发。
- 开发者通常依赖线程池缓解,但无法彻底解决开销问题。
2.Project Loom(核心解决方案)
- 虚拟线程(Virtual Threads):JDK 19+ 引入的轻量级协程实现(JEP 425),由JVM调度,映射到少量OS线程上运行。
- 特点:
- 语法与传统线程兼容(基于Thread类),易于迁移。
- 创建和切换开销极低,支持百万级并发。
- 适用于阻塞型任务(如网络I/O),自动挂起/恢复。
- 总结:
- Java 一开始并没有原生支持协程。
- 但在 Java 19 中通过 Project Loom 引入了虚拟线程(VirtualThreads),最终在 Java21 中确认。
- 它提供了类似协程的功能。
- 虚拟线程可以被认为是 Java 对协程的一种实现,虽然实现原理与传统协程略有不同,但它实现了高效并发。
3.代码示例
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {executor.submit(() -> {System.out.println("Hello, Virtual Thread!");});
}
4.历史方案(不推荐)
- 早期通过第三方库(如Quasar、Kilim)实现协程,需字节码修改或特殊注解,维护成本高。
四、总结
- 协程优势:轻量级、低开销、高并发,适合I/O密集型任务。
- Java现状:通过 Project Loom 的虚拟线程原生支持协程,JDK 19+ 可体验,JDK 21 正式发布。
- 未来趋势:虚拟线程将显著简化Java高并发编程,成为替代传统线程池的重要选择。