Java:取消未来

问题描述 投票:0回答:1

我正在使用

ThreadPoolExecutor.submit
创建多个 future 以并行写入数据库。

for(BusinessElement el : elements){ list.add(threadPoolExecutor.submit(() -> createElement(el))); }

所以我想做的是当一个提交失败时停止所有执行,意味着当一个提交失败时它 应该停止所有活动线程的执行并从 foreach 块中退出。

他们有什么优雅的解决方案吗?

java concurrent.futures
1个回答
0
投票

如果可以,请使用结构化并发

try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    ...
    scope.fork(() -> createElement(el));
    scope.join();
}

如果无法选择结构化并发,请使用 tascalate-concurrent。它是

CompletionStage
的实现,适用于 I/O 任务,可中断且组合合理,没有任何可以说为
CompletableFuture
的实现。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.