CompletableFuture使用(四)

CompletableFuture中需要多个异步任务执行,再执行异步操作,allOf和anyOf

1. allOf: CompletableFuture是多个任务执行完成后才会执行,有一个任务执行异常CompletableFuture执行get()方法就会抛出异常,如果正常执行,get返回null.

//查询出文件内容中有CompletableFuture的文件数量
List<String> fileList = Arrays.asList("news1.txt", "news2.txt", "news.txt");
        List<CompletableFuture<String>> fileFutureList = fileList.stream().map(fileName -> {
            return readFile(fileName);
        }).toList();

        int size = fileFutureList.size();
        CompletableFuture[] futures = fileFutureList.toArray(new CompletableFuture[size]);

        CompletableFuture<Void> allOfFuture = CompletableFuture.allOf(futures);
        CompletableFuture<Long> countFuture = allOfFuture.thenApply(r ->
            fileFutureList.stream()
                    .map(future -> future.join())
                    .filter(content -> content.contains("CompletableFuture"))
                    .count()
        );
        Long count = countFuture.get();
        CommonUtil.printThreadLog(count+"");

2. anyOf: CompletableFuture多个任务只要有一个任务完成,get()则返回任务结果,如果所有任务未返回前任务异常get()抛出异常

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            CommonUtil.sleepSecond(3);
            return "future1";
        });
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            CommonUtil.sleepSecond(2);
            return "future2";
        });
        CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {
            CommonUtil.sleepSecond(4);
            return "future3";
        });

        CompletableFuture<Object> anyOfFuture = CompletableFuture.anyOf(future1, future2, future3);
        Object join = anyOfFuture.join();
        CommonUtil.printThreadLog(join+"");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值