首页 > 资讯

全球快播:JDK 21 中的结构化并发:并发编程的一次飞跃

互联网 2023-06-27 12:41:20

作者 | A N M Bazlur Rahman

译者 | 张卫滨


(资料图)

策划 | 丁晓昀

JEP 453,结构化并发(预览)已经从 JDK 21 的 Targeted 状态变更为 Integrated 状态。这个最初的预览特性来源于一个孵化 API,它根据前两轮的孵化纳入了一些改进,这两轮孵化分别是 JDK 19 交付的JEP 428,结构化并发(孵化)和 JDK 20 交付的JEP 437,结构化并发(第二轮孵化)。在当前提案中,唯一的显著变化是StructuredTaskScope::fork(...)方法返回一个[Subtask],而不是Future。这是一个预览特性。

JDK 21 中的结构化并发致力于引入结构化并发的 API 来简化并发编程。这种方法将在不同线程中运行的相关任务组视为一个工作单元,从而简化了错误处理和取消,提高了可靠性,并增强了可观测性。我们看一个样例:

Response handle() throws ExecutionException, InterruptedException {     try (var scope = new ()) {          Supplieruser  = (() ->findUser());          Supplierorder = (() ->fetchOrder());          ()            // Join both subtasks                .throwIfFailed();  // ... and propagate errors          // Here, both subtasks have succeeded, so compose their results          return new Response((), ());    }    //...}

这段代码创建了一个新的StructuredTaskScope,并使用它来创建了两个分支子任务,其中一个执行 findUser() ,另一个执行 fetchOrder() 。当这两个子任务均完成时,它会使用这两个子任务的结果创建一个新的 Response

结构化并发是一个预览 API,默认是禁用的。要使用 StructuredTaskScope API,开发人员必须启用预览 API 来编译该代码,如下面的命令所示:

javac --release 21 --enable-preview 

运行该程序也需要相同的标记:

java --enable-preview Main

但是,我们可以使用源码启动器(source code launcher)来直接运行它。在这种情况下,命令行如下所示:

java --source 21 --enable-preview 

使用jshell方案也是可以的,不过依然需要启用预览特性:

jshell --enable-preview

在实践中,使用 StructuredTaskScope 时,大多数情况下都不会直接使用 StructuredTaskScope 类,而是使用两个子类中的某一个,这两个子类均实现了关闭策略。这两个子类,即 ShutdownOnFailure ShutdownOnSuccess ,分别支持在第一个子任务失败或成功时关闭作用域的模式。

结构化并发将在不同线程中运行的相关任务视为一个工作单元。这种方式简化了错误处理和取消,提高了可靠性,并增强了可观测性。开发者Ron Pressler是甲骨文公司技术员工的咨询成员,并且是 OpenJDK 的Loom项目的技术负责人,Alan Bateman是甲骨文公司 Java 平台组的工程师,他们意图消除与并发编程相关的常见风险,如线程泄露和取消延迟,并增强并发代码的可观测性。

这个新特性的目的并不是要取代包中的任何并发结构,如ExecutorService和Future。它的目的也不是为 Java 平台定义明确的结构化并发 API,或在线程间共享数据流的方法。

当前的并发编程模型,如 ExecutorService API,由于其不受限制的并发模式,引入了复杂性和风险。这些模型不会强制要求或跟踪任务和子任务之间的关系,使得并发任务的管理和可观测性很具挑战性。

结构化并发提出,任务结构应该反映代码结构。在单线程代码中,执行过程总是会强制保证任务和子任务的层次结构,每个子任务相对于其他子任务的生命周期是由代码的语法块结构来管理的。

新的 StructuredTaskScope ExecutorService 提供了一个更简单、更安全地替代方案。这个 API 封装了一组应该一起完成的相关任务,任何子任务的失败都会导致其余子任务的取消。

有关这些变更的更多细节,包括代码示例和对该功能背后动机的全面讨论,请参阅OpenJDK的网站。

这个新的 API 是使并发编程更容易、更可靠和更具可观测性的重要一步。预计它对构建可维护的、可靠的和可观测的服务器应用尤为有利。对深入了解结构化并发感兴趣,或愿意学习其相关背景的开发人员可以收听InfoQ Podcast、Ron Pressler 的YouTube课程和Inside Java的文章。

原文链接:

Structured Concurrency in JDK 21: A Leap Forward in Concurrent Programming

本文转载来源:

/article/1NdPKQpZJGmKxm2v6SP2

上一篇 下一篇
热文推荐 更多

全球快播:JDK 21 中的结构化并发:并发编程的一次飞跃

2023-06-27

陕天然气:目前公司城市燃气业务正常开展

2023-06-27

关羽是哪里人_是山西运城人 环球热闻

2023-06-27

世界快报:50条措施! 三亚“硬核”举措促文旅消费增长

2023-06-27

全球观天下!用户账户控制怎么取消_用户账户

2023-06-27

【寻味中华丨饮食】敦煌李广杏:念念不忘的夏至味道_要闻

2023-06-27

每日速递:工程造价员主要工作内容(工程造价员的职责)

2023-06-27

2023江苏养老金上调方案最新消息 2022~2023年江苏养老金调整最新消息(全文)

2023-06-27

小米王化:小米汽车14.99万起售为假消息

2023-06-27

焦点速读:【话“双圈”聊发展】自贡:主动对接“双核”答好融入成渝发展考卷

2023-06-27

以色列政府批准新建5600余套犹太人定居点住房 焦点快看

2023-06-27

新冠病毒装配蛋白速度可能越来越慢

2023-06-27

刑诉解释全文_刑诉解释_全球快播

2023-06-27

视讯!探访海口美兰机场封关运作项目

2023-06-27

天天滚动:信音电子7月3日新股申购,你要打吗?

2023-06-27

延安特产有哪些送人的_延安特产-世界新要闻

2023-06-27

阿尔卡拉兹完胜德米纳尔夺草地首冠!超越德约科维奇重返世界第一

2023-06-27

日本强行推进核污染水排海 引发国际社会普遍质疑与强烈反对

2023-06-26

售价33.5万元 坦克500Hi4-T正式上市

2023-06-26

装修巨坑Top10,没有10年经验总结不出来

2023-06-26