java 8 CompletableFuture 初探

最近组内分享了一下java 8中的CompletableFuture特性感觉非常赞的一个功能。

下面小记一下基本的使用:

1.使用场景

  1. 将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。
  2. 等待 Future 集合中的所有任务都完成 或者 仅等待 Future 集合中最快结束的任务完成(有可能因为它们试图通过不同的方式计算同一个值),并返回它的结果。
  3. 应对 Future 的完成事件(即当 Future 的完成事件发生时会收到通知,并能使用 Future计算的结果进行下一步的操作,不只是简单地阻塞等待操作的结果)
  4. 多个Future 结果之间的依赖性。

2.使用DEMO

 //DEMO 1 :异步执行、异常处理
            CompletableFuture<String> completableFuture=new CompletableFuture();

            new Thread(()->{
                //模拟执行耗时任务
                System.out.println("task doing...");
                try {
                    Thread.sleep(3000);
                    throw new RuntimeException("抛出异常");
                } catch (InterruptedException e) {
                    //异常处理
                    completableFuture.completeExceptionally(e);
                }
                //告诉completableFuture任务已经完成
                completableFuture.complete("result");
            }).start();
            //获取任务结果,如果没有完成会一直阻塞等待
            String result=completableFuture.get();
            System.out.println("计算结果:"+result);

        CompletableFuture<String> completableFuture2=CompletableFuture.supplyAsync(()->{
            try {
                Thread.sleep(3000);

            }catch (Exception e){
                return "fail";
            }
            return "success";
        });


        //DEMO 2 :anyOf 或者 allOf
        CompletableFuture<Object> anyResult=CompletableFuture.anyOf(completableFuture,completableFuture2);

        System.out.println("第一个完成的任务结果:"+anyResult.get());

        CompletableFuture<Void> allResult=CompletableFuture.allOf(completableFuture,completableFuture2);

        //阻塞等待所有任务执行完成
        allResult.join();
        System.out.println("所有任务执行完成");

        //DEMO 3 :第一个的结果作为第二个的入参
        CompletableFuture completableFuture3=completableFuture2.thenCompose(o->CompletableFuture.supplyAsync(()->{
            System.out.println(o);
            return "success";
        }));
        completableFuture3.get();

       //DEMO  4:全不相干的 CompletableFuture 对象的结果整合起来,而且你也不希望等到第一个任务完全结
        CompletableFuture completableFuture4=completableFuture2.thenCombine(completableFuture,(o1,o2)-> o1+o2);
        completableFuture4.get();

        //DEMO 5:CompletableFuture 完成执行后回调函数
        completableFuture4.thenAccept(result2->{
            System.out.println(result);
        });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值