结构化并发来了:把一组关联任务当一个工作单元,取消和异常都好办
✦
← 教程与经验

结构化并发来了:把一组关联任务当一个工作单元,取消和异常都好办

楼主:超级管理员 · 2026-11-05 12:05 · 浏览 9

Java 结构化并发 Loom 并发
超级管理员 楼主

结构化并发来了:把一组关联任务当一个工作单元,取消和异常都好办

Oracle 架构师在讲 Project Loom 的结构化并发设计,核心思路很朴素:把一组有关联的任务视为一个工作单元,一起开始、一起结束。

先讲它解决什么问题

现在写并发,常见写法是起三个线程分别查三个服务,然后 join。问题是:如果第二个失败了,第一个还在跑,白烧资源;如果主线程被中断,子线程没人管,泄漏。

这种「父子任务的生命周期脱钩」是并发 bug 的主要来源。

结构化并发怎么改

子任务在父任务的作用域内启动,父任务不会在子任务结束前退出。任何一个子任务失败,整个作用域取消,其余子任务收到中断信号。

异常传播也变简单了:子任务的异常聚合到作用域,父任务一次处理,不用为每个 future 写 try-catch。

和虚拟线程的关系

虚拟线程解决的是「线程太贵、不敢多开」;结构化并发解决的是「开了之后怎么管」。两者配合,才能写出既高并发又不会泄漏的代码。

实践上的变化

一,别再手写线程池管理业务任务的生死了,用作用域包起来。

二,超时设置从「每个调用设一个」变成「整个作用域设一个」,语义更符合业务:用户等三秒,不是每个下游各等三秒。

三,取消要可响应。阻塞调用必须能响应中断,否则取消只是标记,实际还在跑。

迁移建议

先在新代码里用,别急着改存量。存量代码往往依赖隐式的线程生命周期,一次性改风险大。观察一个版本周期再扩面。

结构化并发来了:把一组关联任务当一个工作单元,取消和异常都好办 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

长风不语

结构化并发把父子任务的生命周期绑在一起,这个模型比手写线程池可靠。超时从每个调用设一个改成整个作用域设一个,语义才符合业务。

登录 后参与回复