网易首页 > 网易号 > 正文 申请入驻

JEP 525 为 Java 的结构化并发引入超时处理与连接器优化

0
分享至


作者 | A N M Bazlur Rahman

译者 | 平川

JEP 525(结构化并发预览版 6)已经完成,将随即将发布的 JDK 26 交付。自 JDK 21 发布以来,结构化并发 API 已经经历过多轮预览改进,JEP 525 延续了这项工作,目的是使并发任务管理比传统的 ExecutorService/Future 模式更清晰、更安全、更易于推理。这次迭代只做了一些小幅但有用的调整,核心模型保持不变。

结构化并发将相关任务组视为一个工作单元,与临时线程管理相比,改善了任务取消、错误传播和可观察性。该 API 以 java.util.concurrent.StructuredTaskScope 和 Joiner 抽象为中心,后者可以控制如何以及何时组合分叉子任务的结果。

与预览版 5(用静态工厂方法替换构造函数并引入更丰富的 Joiner 策略)不同,预览版 6 专注于对 API 进行一系列增量式的小改进。

结构化并发作用域可以配置超时。在此次预览之前,scope.join() 超时时会立即抛出 TimeoutException 异常。预览版 6 在 Joiner 上引入了新的 onTimeout() 回调,允许自定义连接器响应超时,并返回部分或后备结果,而不是总是抛出异常。这使得自定义连接器能够在有时间限制的情况下确定结构化并发工作如何完成。

常见的连接器 Joiner.allSuccessfulOrThrow()) 现在直接从 scope.join() 返回 List ,而不是 Subtask Handles 的流。在常见的用例中,这可以减少样板代码。

简洁明了起见,anySuccessfulResultOrThrow() 已重命名为 anySuccessfulOrThrow()),而行为保持不变(返回第一个成功的结果,取消其余操作)。

现在,StructuredTaskScope.open() 的重载方法在接受配置修饰符时,预期参数类型已从 Function 改为 UnaryOperator 。该变更旨在收紧 API 规范并防止意外的类型混用。

基本使用模式保持不变。首先打开一个结构化任务作用域,分叉相关子任务,通常是在虚拟线程上,并通过调用 join() 等待其完成。作用域可以确保当块退出时,所有子任务要么已完成要么已被取消。

try (var scope = StructuredTaskScope.open()) {
var user = scope.fork(() -> fetchUser(userId));
var order = scope.fork(() -> fetchOrder(userId));
scope.join(); // 等待所有子任务
String name = user.get();
int count = order.get();
}

当配置了超时时,自定义连接器可能会处理超时并返回部分结果,而不是使 join() 因异常而失败。

class PartialCollector 

 implements StructuredTaskScope.Joiner 

 > { 


private final Queue results = new ConcurrentLinkedQueue<>();
@Override
public boolean onComplete(StructuredTaskScope.Subtask st) {
if (st.state() == StructuredTaskScope.Subtask.State.SUCCESS) {
results.add(st.get());
}
return false;
}
@Override
public void onTimeout() {
IO.println("Timed out, returning partial results");
}
@Override
public List result() {
return List.copyOf(results);
}
}
try (var scope = StructuredTaskScope.open(
new PartialCollector (),
cfg -> cfg.withTimeout(Duration.ofSeconds(1))
)) {
scope.fork(() -> fetchA());
scope.fork(() -> fetchB());
List partial = scope.join(); // 超时时的部分结果
IO.println("Partial results: " + partial);
}

在这个例子中,自定义连接器收集已完成的子任务,并在作用域超时时返回累积的结果,而不是抛出 TimeoutException 异常导致操作失败。

预览版 6 并没有大幅修改预览版 5 中引入的 API,而是致力于提高它们在常见使用模式中的易用性和灵活性。新增的超时钩子可以更为优雅地处理速度慢或不可预测的子任务,而不会削弱结构化保证。将结果作为列表而不是流返回可以简化结果处理过程,而统一的命名规范与更精简的配置 API 则进一步完善了整体设计。

对于已经在试用虚拟线程和结构化任务作用域的团队来说,这些改进解决了早期预览版中观察到的问题,而该功能仍然处于预览阶段。

结构化并发是 Loom 项目更广泛的并发路线图的关键组成部分。结合虚拟线程使用时,它能够以结构化的方式管理明确定义了生命周期的相关并发任务。预览版 6 延续了迭代预览流程,其变更基于针对前期预览版本的反馈意见。

开发人员可以通过在 JDK 26 早期访问构建中启用预览功能(--enable-preview)来尝试结构化并发,并通过 OpenJDK 邮件列表提供反馈。

https://www.infoq.com/news/2026/01/timeout-joiner-refinements/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
沃什胜出!特朗普为何提名他任美联储主席?对市场有何影响?

沃什胜出!特朗普为何提名他任美联储主席?对市场有何影响?

澎湃新闻
2026-01-30 20:25:35
他年纪轻轻财富自由,背地里性虐成狂。打坏女人隆胸假体,叫她换硅胶的,更耐打..

他年纪轻轻财富自由,背地里性虐成狂。打坏女人隆胸假体,叫她换硅胶的,更耐打..

英国那些事儿
2026-01-29 23:25:43
“明公主”赶在春节前被执行,她面相慈善,为何心狠手辣?

“明公主”赶在春节前被执行,她面相慈善,为何心狠手辣?

三农老历
2026-01-30 18:04:54
事业巅峰远赴美国,被老外“玩腻”后晚年回国,如今变成了这样!

事业巅峰远赴美国,被老外“玩腻”后晚年回国,如今变成了这样!

归史
2025-12-09 11:10:44
这是俩新秀?堪比超巨对轰!弗拉格轰49+10,难耐4号秀8三分+绝杀

这是俩新秀?堪比超巨对轰!弗拉格轰49+10,难耐4号秀8三分+绝杀

你的篮球频道
2026-01-30 12:21:14
总统秒变摇滚主唱!阿根廷米莱突袭前女友演唱会,合唱情歌掀狂欢

总统秒变摇滚主唱!阿根廷米莱突袭前女友演唱会,合唱情歌掀狂欢

老马拉车莫少装
2026-01-30 01:08:35
补贴一停,销量归零,不是危言耸听,恰是中国电车的真相!

补贴一停,销量归零,不是危言耸听,恰是中国电车的真相!

柏铭锐谈
2026-01-28 09:27:02
国台办果然没看错,郑丽文真面目被彻底揭露!小算盘到此为止了

国台办果然没看错,郑丽文真面目被彻底揭露!小算盘到此为止了

比利
2026-01-23 12:41:53
王玉雯被曝分手后现身巴黎!素颜满脸疲惫,母亲跟在身后默默陪伴

王玉雯被曝分手后现身巴黎!素颜满脸疲惫,母亲跟在身后默默陪伴

雨月海星
2026-01-29 00:16:10
这可能是中日经济的最后一战,中国两张王牌,日本或将塌方式溃败

这可能是中日经济的最后一战,中国两张王牌,日本或将塌方式溃败

小嶯说故事
2026-01-28 20:39:45
“儿子都腺样体了,还吃烤肠呢?”一份糊弄早餐暴露家长的低认知

“儿子都腺样体了,还吃烤肠呢?”一份糊弄早餐暴露家长的低认知

妍妍教育日记
2025-12-26 17:18:26
黄金史诗级巨震,5500-5100-5450,2倍做空白银15%收益归零

黄金史诗级巨震,5500-5100-5450,2倍做空白银15%收益归零

金石随笔
2026-01-30 08:34:11
高峰也没想到,他当年抛弃的儿子,如今开始给那英争光了

高峰也没想到,他当年抛弃的儿子,如今开始给那英争光了

趣文说娱
2026-01-04 16:34:24
皖南事变只两千人突围生还,新四军军部为何能在盐城浴火重生?

皖南事变只两千人突围生还,新四军军部为何能在盐城浴火重生?

磊子讲史
2026-01-28 17:14:57
相声新势力彻底没了!打了2年的官司有了结果,卢鑫完败玉浩全胜

相声新势力彻底没了!打了2年的官司有了结果,卢鑫完败玉浩全胜

观察鉴娱
2026-01-28 10:35:08
杨鸣揭秘球员转会!张镇麟选择上海,周琦有特权,赵继伟也要走?

杨鸣揭秘球员转会!张镇麟选择上海,周琦有特权,赵继伟也要走?

体坛大事记
2026-01-30 11:01:10
完了,腿筋重伤+赛季报销,掘金夺冠核心又伤了!

完了,腿筋重伤+赛季报销,掘金夺冠核心又伤了!

体育新角度
2026-01-30 12:47:36
媒体:哪怕詹姆斯41岁、第23个赛季,依旧被联盟哄抢!

媒体:哪怕詹姆斯41岁、第23个赛季,依旧被联盟哄抢!

氧气是个地铁
2026-01-30 16:39:03
沪金夜盘收跌9.83% 沪银收跌17%

沪金夜盘收跌9.83% 沪银收跌17%

财联社
2026-01-31 02:32:28
过气男顶流沦为酒局“工具人”!全程讨好、倒酒赔笑,像一个商品

过气男顶流沦为酒局“工具人”!全程讨好、倒酒赔笑,像一个商品

涵豆说娱
2026-01-19 18:16:27
2026-01-31 08:52:49
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
12005文章数 51727关注度
往期回顾 全部

科技要闻

意念控制机器人不是科幻 1-2年就落地

头条要闻

特朗普听到"中英破冰"秒垮脸 失心疯的全过程被拍下

头条要闻

特朗普听到"中英破冰"秒垮脸 失心疯的全过程被拍下

体育要闻

“假赌黑”的子弹,还要再飞一会儿吗?

娱乐要闻

警方通报金晨交通事故,否认网传骗保

财经要闻

白银,暴跌!黄金,40年最大跌幅!

汽车要闻

合资品牌首搭800V/5C快充 东风日产NX8将于3、4月上市

态度原创

本地
数码
时尚
家居
公开课

本地新闻

云游中国|拨开云雾,巫山每帧都是航拍大片

数码要闻

美国洛杉矶拟禁止一次性打印机墨盒,厂商商业模式或受冲击

女友BELLA+封面 | Ginny&Jayna:连锁反应

家居要闻

蓝调空舍 自由与个性

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版