BlockingonacollectionofFutures(在一组Futures上阻塞)
创始人
2024-12-22 20:30:25
0

如果需要等待一组未来值而不想阻塞主线程,可以使用 CompletableFuture 类提供的 CompletableFuture.allOf() 方法。该方法接受一组 CompletableFuture 对象并返回一个新的 CompletableFuture,该 CompletableFuture 在所有对象都完成后执行。可以将回调附加到这个 CompletableFuture,以在所有对象都完成后执行。

以下是一个示例代码,演示如何在一组 CompletableFuture 中使用 allOf() 方法:

import java.util.concurrent.*;

public class CompletableFutureExample {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newFixedThreadPool(2);

        CompletableFuture future1 = CompletableFuture.supplyAsync(() -> {
            try {
               Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result of Future 1";
        }, executor);

        CompletableFuture future2 = CompletableFuture.supplyAsync(() -> {
            try {
               Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result of Future 2";
        }, executor);

        CompletableFuture future3 = CompletableFuture.supplyAsync(() -> {
            try {
               Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result of Future 3";
        }, executor);

        CompletableFuture allFutures = CompletableFuture.allOf(future1, future2, future3);

        allFutures.thenRun(() -> {
            try {
                String combinedResult = future1.get() + "\n" + future2.get() + "\n" + future3.get();
                System.out.println(combinedResult);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            executor.shutdown();
        });

        // wait for all futures to complete
        allFutures.get();
    }
}

在上面的示例中,我们用 CompletableFuture.supplyAsync() 创建了三个 Future。然后,我们使用 CompletableFuture.allOf() 创建了一个 CompletableFuture,使得我们可以等待所有 Future 的完成而不阻塞主线程。在所有未来对象完成时执行回调。然后我们使用 Future.get() 来等待每个 Future 的结果,并将它们组合起来。最后,我们关闭了线程池。

相关内容

热门资讯

解迷透视!wpk辅助哪里买,微... 解迷透视!wpk辅助哪里买,微信小程序微乐辅助器免费版v2.0免费,操作教程(真实有挂)-哔哩哔哩w...
曝光透视!wpk安卓下载辅助,... 曝光透视!wpk安卓下载辅助,微乐河南小程序辅助器免费,步骤教程(真的有挂)-哔哩哔哩wpk安卓下载...
解谜透视!wepoker模拟器... 解谜透视!wepoker模拟器哪个,淘宝的微乐辅助是真的吗,攻略教程(有挂教程)-哔哩哔哩wepok...
教你透视!wepoker怎么获... 教你透视!wepoker怎么获得好牌,微信小程序微乐自建房脚本下载,步骤教程(有挂透明挂)-哔哩哔哩...
普及透视!wejoker私人辅... 普及透视!wejoker私人辅助软件,微信小程序微乐房间有技巧吗,资料教程(有挂细节)-哔哩哔哩1、...
辅助透视!wepoker可以透... 辅助透视!wepoker可以透视码,微乐小程序插件免费贴吧,总结教程(确实有挂)-哔哩哔哩1、游戏颠...
有挂透视!wpk辅助插件,微乐... 有挂透视!wpk辅助插件,微乐小程序辅助开发,手段教程(有挂详细)-哔哩哔哩wpk辅助插件能透视中分...
分享透视!wpk俱乐部是真的吗... 分享透视!wpk俱乐部是真的吗,微乐辅助软件购买平台,阶段教程(有挂方法)-哔哩哔哩所有人都在同一条...
专业透视!德州局脚本,微乐小程... 专业透视!德州局脚本,微乐小程序微乐家乡辅助器,要领教程(证实有挂)-哔哩哔哩1、点击下载安装,德州...
专业透视!wepoker辅助透... 专业透视!wepoker辅助透视软件,微乐小程序辅助收费,资料教程(果真有挂)-哔哩哔哩1、wepo...