CompletableFuture 六大类 14种 代码模板

本文详细介绍了CompletableFuture在Java中的各种用法,包括无返回值执行、带返回值、回调处理、异常处理、任务串行与并行、双任务回调等场景,为开发者提供了丰富的代码模板和实战技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CompletableFuture 异步框架,有很多种使用场景,总结了几种代码模板:

        // 一 ,平常的任务
        // 1、 异步执行任务, 不提供返回值
        CompletableFuture cf_ra = CompletableFuture.runAsync(()->{
            // your code
        });

        // 2、 异步执行任务, 提供返回值
        CompletableFuture cf_saa = CompletableFuture.supplyAsync(()->{
            // your code
            return 1; // result
        });


        // 二 单任务处理后 回调
        // 3、 任务执行完之后,回调 指定的任务,不接收上一任务结果,不提供返回值
        CompletableFuture<Long> cf_tr = CompletableFuture.supplyAsync(()->1L);
        cf_tr.thenRun(()->{
            // just code
        });

        // 4、 任务执行完之后,回调,接收任务处理结果,不提供返回值
        CompletableFuture<Long> cf_taccept = CompletableFuture.supplyAsync(()->1L);
        cf_taccept.thenAccept(t->{
            // t 上一个任务的执行结果
            // your code
        });

        // 5、 任务执行完之后,回调,接收任务处理结果,提供返回值
        CompletableFuture<Long> cf_ta = CompletableFuture.supplyAsync(()->1L);
        cf_ta.thenApply(t->{
            // t 上一个任务的执行结果
            // your code
            return 1;// result
        });


        // 三 单任务处理后 回调,兼容异常信息
        // 6、 任务执行完之后, 回调,接收任务处理结果 和 任务处理异常,不提供返回值
        CompletableFuture cf_wc = CompletableFuture.supplyAsync(()->1);
        cf_wc.whenComplete((t1,t2)-> {
            // t1 上一个任务执行结果
            // t2 上一个任务执行异常信息
            // your code
        });


        // 7、 任务执行完之后, 回调,接收任务处理结果 和 任务处理异常,提供返回值
        CompletableFuture<Long> cf_h = CompletableFuture.supplyAsync(()->1L);
        cf_h.handle((t1,t2)->{
            // t1 上一个任务执行结果
            // t2 上一个任务执行异常信息
            // your code
            return 1;// result
        });


        // 四 任务串行化
        // 8、 两个任务顺序执行,A执行完后,执行B
        CompletableFuture cf_tcc1 = CompletableFuture.runAsync(()->{});
        CompletableFuture cf_tcc2 = CompletableFuture.runAsync(()->{});
        CompletableFuture cf_tcc3 = cf_tcc1.thenCompose(t->cf_tcc2);

        // 五 双任务处理后,回调
        // 9、 A任务和B任务 都处理结束后,回调,接收 任务A的结果 和 任务B的结果 , 提供返回值
        CompletableFuture<Long> cf_tc1 = CompletableFuture.supplyAsync(()->1L);
        CompletableFuture<Long> cf_tc2 = CompletableFuture.supplyAsync(()->2L);
        CompletableFuture<Long> cf_tc = cf_tc1.thenCombine(cf_tc2,(t1,t2)->{
            // t1 任务 cf_tc1 的处理结果
            // t2 任务 cf_tc2 的处理结果
            // your code
            return t1 + t2; // result
        });

        // 10、 A任务和B任务 都处理结束后,回调,接收 任务A的结果 和 任务B的结果 , 不提供返回值
        CompletableFuture<Long> cf_tab1 = CompletableFuture.supplyAsync(()->1L);
        CompletableFuture<Long> cf_tab2 = CompletableFuture.supplyAsync(()->2L);
        CompletableFuture<Void> cf_tab = cf_tab1.thenAcceptBoth(cf_tab2,(t1,t2)->{
            // t1 任务 cf_tab1 的处理结果
            // t2 任务 cf_tab2 的处理结果
            // your code
        });

        ///11、A任务和B任务 都处理结束后,回调,不接收 处理结果,不提供返回值
        CompletableFuture<Long> cf_rab1 = CompletableFuture.supplyAsync(()->1L);
        CompletableFuture<Long> cf_rab2 = CompletableFuture.supplyAsync(()->2L);
        CompletableFuture<Void> cf_rab = cf_rab1.runAfterBoth(cf_rab2,()->{
            // your code
        });

        // 六 双任务 有一个任务结束后 回调
        // 12、 A任务和B任务 有一个任务处理结束后,回调,接收处理结果,提供返回值
        CompletableFuture<Long> cf_ate1 = CompletableFuture.supplyAsync(()->1L);
        CompletableFuture<Long> cf_ate2 = CompletableFuture.supplyAsync(()->2L);
        CompletableFuture<Long> cf_ate = cf_ate1.applyToEither(cf_ate2,t->{
            // t , cf_ate1 和 cf_ate2 的两个任务,哪个任务 最先有结果,t 就是 哪个任务的处理结果
            // your code
            return t;
        });

        // 13、 A任务和B任务 有一个任务处理结束后,回调,接收处理结果,不提供返回值
        CompletableFuture<Long> cf_ae1 = CompletableFuture.supplyAsync(()->1L);
        CompletableFuture<Long> cf_ae2 = CompletableFuture.supplyAsync(()->2L);
        CompletableFuture<Void> cf_ae = cf_ae1.acceptEither(cf_ae2,t->{
            // t , cf_ae1 和 cf_ae2 的两个任务,哪个任务 最先有结果,t 就是 哪个任务的处理结果
            // your code
        });

        ///14、A任务和B任务 有一个任务处理结束后,回调,不接收 处理结果,不提供返回值
        CompletableFuture<Long> cf_rae1 = CompletableFuture.supplyAsync(()->1L);
        CompletableFuture<Long> cf_rae2 = CompletableFuture.supplyAsync(()->2L);
        CompletableFuture<Void> cf_rae = cf_rae1.runAfterEither(cf_rae2,()->{
            // your code
        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值