0Pricing
Java Academy · 课时

结构化并发模型

将相关任务视为一个整体

结构化并发模型 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 结构化并发模型
  2. StructuredTaskScope
  3. 失败与成功时关闭
  4. 错误处理与取消
← 返回 Java Academy