【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

  • 2023-06-25
    北京
  • 本文字数:1793 字

    阅读完需:约 6 分钟

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

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 StructuredTaskScope.ShutdownOnFailure()) {          Supplier<String>  user  = scope.fork(() ->  findUser());          Supplier<Integer> order = scope.fork(() ->  fetchOrder());          scope.join()            // Join both subtasks                .throwIfFailed();  // ... and propagate errors          // Here, both subtasks have succeeded, so compose their results          return new Response(user.get(), order.get());    }    //...}
复制代码


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


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


javac --release 21 --enable-preview Main.java
复制代码


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


java --enable-preview Main
复制代码


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


java --source 21 --enable-preview Main.java
复制代码


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


 jshell --enable-preview
复制代码


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


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


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

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


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


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


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

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


原文链接:

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


相关阅读:

Java 近期新闻:JDK 21 进入 Rampdown 阶段、JEP 404、JDK 22 专家组、Jakarta EE 11 升级

快速实现不打折扣的云原生 Java 应用

JEP 444:JDK 21 中出现虚拟线程,开创并发新纪元

2023-06-25 12:574991

评论 2 条评论

发布
用户头像
大神解读下,跟CompletableFuture的区别是什么?
2023-06-26 14:52 · 上海
回复
更简单了
2023-06-29 10:52 · 四川
回复
没有更多了
发现更多内容

图数据库有哪些:知名图数据库产品和应用场景介绍

悦数图数据库

数据库 图数据库

企业级私有化部署即时通讯,完美替代SaaS平台

WorkPlus

5 个 实用的 JavaScript 开发小技巧

互联网工科生

JavaScript Web应用开发

低代码开发 轻松解决企业数字化能力建设困局

力软低代码开发平台

百度智能云推出828大促活动,文心AI作画低至9.9元

科技热闻

从FTP到SFTP,哪个才是跨国传输大文件的最佳方案

镭速

大文件传输 传输大文件 跨国大文件传输

如何高效实现混合App开发?

FinFish

混合开发 小程序化 混合app 超级App开发

第二周作业

大肚皮狒狒

近期大型攻防演练观感及未来攻防趋势判断

墨菲安全

安全 软件供应链

UltraEdit mac(文本编辑器) v22.0.0.18中文版下载

mac

UltraEdit 文本编辑器 苹果mac Windows软件

低代码平台实践

这我可不懂

低代码 零代码 JNPF 纯代码

2023.10.14-价值最大化沙盘演练

ShineScrum捷行

面部表情识别的伦理问题与应对策略

来自四九城儿

使用 ChatGPT 的代码解释器进行数据科学的 5 种方法

3D建模设计

Python 数据分析 ChatGPT

OpenTiny Vue 3.10.0 版本发布:组件 Demo 支持 Composition 写法,新增4个新组件

OpenTiny社区

前端 开源项目 UI组件库

如何设计自动化测试落地方案

老张

自动化测试 测试方案

业内首份!电信和互联网数据安全标准汇编发布(附下载)

极盾科技

数据安全

解码全栈

互联网工科生

开发者 全栈工程师 全栈开发

LangChain + Streamlit + Llama:将对话式AI引入本地机器

3D建模设计

人工智能 LLM

只有理解Token和内存,才能更好掌握ChatGPT!

这我可不懂

AI ChatGPT 大语言模型

Adobe联创去世,没他就没有PDF,乔布斯也因他逆风翻盘

Openlab_cosmoplat

PDF

Maxon MX6974 F5 Qualcomm QCN9074 embedded 4x4 industrial WiFi 6 Module

wifi6module

如何使用LLM实现文本自动生成视频

3D建模设计

Python 人工智能

提升研发效能的低代码思路

高端章鱼哥

自动化 研发效能 低代码 JNPF

这款Linux不收费,却赢得了江湖!

高端章鱼哥

Linux 开源 npm

悦数图数据库与 keyarchOS 完成浪潮信息澎湃技术认证

悦数图数据库

数据库 图数据库 分布式图数据库

Dreamweaver 2021中文版下载 网页编辑软件dw2021纯净版

mac

苹果mac Windows软件 Dreamweaver 2021 网页编辑软件 DW021

学习 ChatGPT 一切基础知识的绝佳资源

3D建模设计

人工智能 ChatGPT LLM

面部表情识别技术的最新研究进展

来自四九城儿

面部表情识别技术在人机交互中的应用

来自四九城儿

使用three.js与WebGL相比有什么优势?

3D建模设计

WebGL three.js

JDK 21中的结构化并发:并发编程的一次飞跃_编程语言_A N M Bazlur Rahman_InfoQ精选文章