gpt4 book ai didi

java 8并行流,阻塞代码可能吗?

转载 作者:行者123 更新时间:2023-11-29 07:29:32 28 4
gpt4 key购买 nike

我的情况很简单。

我有一个列表,我想对每个项目异步执行逻辑。

当所有线程都完成后,我想调用一个关闭连接。

像这样:

bucketsList.parallelStream().forEach(t -> {
//some logic
});
try {
RestApi.getInstance().closeClientConnection();
} catch (IOException e) {
e.printStackTrace();
}

有没有办法让 closeConnection 部分等待并行 Stream 完成其所有对象的遍历?

编辑:我不能使用 CountDownLatch,因为我不知道我将在 bucketsList 中拥有多少项

最佳答案

ParallelStream 的操作仍在阻塞并将等待它生成的所有线程完成。这些线程是异步执行的(它们不会等待前一个线程完成),但这并不意味着您的整个代码开始异步运行!

如果您实际上是在进行异步调用并处理生成的 CompletableFuture<T>在你的forEach , 你应该让你的终端操作成为 reduce生产单CompletableFuture<T> .中间操作可以是 peek或身份 map有副作用(两者都不受欢迎,但我不知道任何最佳实践解决方案)。您将在解决单个结果 CompletableFuture<T> 时关闭连接.

如果不是,那么您的代码看起来就足够好了,因为 closeClientConnection()只会执行一次 ParallelStream已处理。

关于java 8并行流,阻塞代码可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44945521/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com