结构化并发模型
将相关任务视为一个整体
结构化并发模型 是 CoddyKit 上的免费 Java Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
什么是结构化并发
结构化并发(JEP 453,预览版)将一组相关的并发任务视为一个工作单元。
如果父任务拆分出子任务,那么所有子任务都必须完成,父任务才能继续执行,就像普通代码中的块作用域一样。
它解决的问题
直接使用执行器时,生成的任务可能比创建者存活更久,可能发生泄漏,也可能被遗忘。某个分支中的错误可能无人察觉,而其他分支仍在继续运行。
这会导致线程泄漏、孤立工作以及令人困惑的失败处理。
任务构成树
结构化并发强制建立父子关系。子任务构成一棵树,根节点是启动它们的任务。
- 子任务不能超出其父作用域的生命周期
- 父任务会等待所有子任务完成
- 取消操作会沿树向下传播
与顺序代码保持一致
核心理念是,并发代码的阅读方式应当像顺序代码一样。作用域开启,工作分叉,只有所有任务都汇合后作用域才会关闭。
这样一来,生命周期一目了然,错误也更容易分析。
旧式非结构化方式
下面是一种使用普通执行器的常见但非结构化的方式。它可以工作,但没有任何机制保证两个异步结果拥有协调一致的生命周期。
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws Exception {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
Future<String> user = exec.submit(() -> "Ada");
Future<Integer> order = exec.submit(() -> 7);
System.out.println(user.get() + " has " + order.get() + " orders");
}
}
}为何协调很重要
在上一个示例中,如果获取用户失败,获取订单的任务仍会无谓地继续运行。您必须手动取消它,并处理每个 get() 抛出的异常。
结构化并发会自动完成这种协调。
预览版状态
结构化并发以预览接口的形式包含在 java.util.concurrent 包中。要使用它,您需要使用 --enable-preview 进行编译和运行。
核心类是 StructuredTaskScope,下一课将介绍它。
生命周期保证
在结构化 scope 内:
- 所有子任务都会在 scope 退出前完成、失败或被取消
- 没有子任务会逃到后台继续运行
- 线程转储中的调用栈会反映真实的任务层级
可观测性优势
由于子任务树是显式的,JDK 工具可以将其展示出来。线程转储会将子任务归入其父 scope 下,因此诊断起来比面对分散的线程池线程清晰得多。
与虚拟线程相得益彰
结构化 scope 中的每个子任务默认都在自己的虚拟线程上运行。虚拟线程的低成本使得将工作分散到大量子任务中变得切实可行。
这两项功能从设计之初就是为了协同工作的。
心智模型
您可以把结构化 scope 想象成并发场景中的资源自动管理代码块:打开它,fork 工作,join,然后关闭。右大括号就是您的保证,确保没有任何任务仍在运行。
快速检查
测试您对核心原则的掌握程度。
回顾
您已经了解了结构化并发模型:
- 相关任务组成一棵与 scope 生命周期绑定的树
- 并发代码读起来就像顺序代码
- 这是一个需要使用
--enable-preview的预览版接口 - 它与虚拟线程天然配合
下一步:StructuredTaskScope 接口本身。
常见问题解答
「结构化并发模型」课时是免费的吗?
是的 — 「结构化并发模型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「结构化并发模型」这节课中我会学到什么?
将相关任务视为一个整体 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「结构化并发模型」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。