当前位置: 首页 > news >正文

协程?协程与线程的区别?Java是否支持协程?

一、前言

  • 协程(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.代码示例

// JDK 21+ 正式支持
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高并发编程,成为替代传统线程池的重要选择。
http://www.xdnf.cn/news/51049.html

相关文章:

  • The_Planets_Earth靶场笔记(VulnHub)
  • 第一章,HCIA复习
  • 人形机器人马拉松:北京何以孕育“领跑者”?
  • C++ 基础:注意a == b; b == a;陷阱
  • 如何高效利用呼叫中心系统和AI语音机器人
  • (12)VTK C++开发示例 --- 生成高斯随机数
  • 苍穹外卖阶段性总结 (超详细版)
  • AIGC(生成式AI)试用 30 -- AI做软件程序测试 1
  • Redis入门
  • 按字符串长度升序,长度相同则按字典序
  • MyFamilyTree:专业家谱族谱制作工具
  • PHP实现图片自动添加水印效果
  • 在 Ubuntu 系统上安装 PostgreSQL
  • INFERENCE SCALING FOR LONG-CONTEXT RETRIEVAL AUGMENTED GENERATION
  • MIT6.S081-lab4
  • 【LeetCode】算法详解#5 ---轮转数组
  • Spring中Bean的作用域和生命周期
  • PICO4 Ultra MR开发 空间网格扫描 模型导出及预览
  • 【外研在线-注册/登录安全分析报告】
  • 聚宽策略----国九条后中小板微盘小改,年化135.40%
  • 【leetcode刷题日记】lc.152-乘积最大子数组
  • C++(23)—模板初阶
  • 计算机组成原理笔记(十七)——4.2定点加减运算
  • 再探模板与泛型编程
  • RocketMQ实现基于可靠消息的最终一致性
  • Java处理字符串用啥?String、StringBuilder、StringBuffer
  • Spring Boot自动装配原理(源码详细剖析!)
  • 计算机是如何看待数据的?
  • Java之封装(学习笔记)
  • 算法分析传输加密数据格式密文存储代码混淆逆向保护