CompletableFuture四种执行关系

1、串行执行

        CompletableFuture<String> future
                = CompletableFuture.supplyAsync(() -> "串行执行1")
                .thenApply(s -> s + "串行执行2")
                .thenApply(String::toUpperCase);
        System.out.println(future.join());
        /*
		输出结果:
			串行执行1串行执行2
		*/

2、并行执行,接口耗时取决于最慢的那个方法

		CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
            Thread.sleep(5000L);
            System.out.println("future1休眠5秒");
        });

        CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
            Thread.sleep(1000L);
            System.out.println("future2休眠1秒");
        });

        CompletableFuture<Void> future3 = CompletableFuture.runAsync(() -> {
            Thread.sleep(4000L);
            System.out.println("future3休眠4秒");
        });

        CompletableFuture<Void> future4 = CompletableFuture.runAsync(() -> {
            Thread.sleep(2000L);
            System.out.println("future4休眠2秒");
        });

        CompletableFuture<Void> allOf = CompletableFuture.allOf(future1, future2, future3, future4);
        allOf.get();
        System.out.println("全部执行完成");

2、AND汇聚,future1和future2都执行完成再执行future3

		// 有返回值方法supplyAsync()
		CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            Thread.sleep(5000L);
            System.out.println("future1休眠5秒");
            return "future1休眠5秒";
        });

		// 无返回值方法runAsync()
        CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
            Thread.sleep(1000L);
            System.out.println("future2休眠1秒");
        });

        CompletableFuture<String> future3 = future1.thenCombine(future2, (param1, param2) -> {
            return "先执行future1和future2,再future3";
        });
        System.out.println(stringCompletableFuture3.join());
        /*
		输出结果:
			future2休眠1秒
			future1休眠5秒
			先执行future1和future2,再future3
		*/

3、OR汇聚,future1和future2任意一个行完成就执行future3

        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            Thread.sleep(5000L);
            System.out.println("future1休眠5秒");
            return "future1执行完成";
        });

        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            Thread.sleep(1000L);
            System.out.println("future2休眠1秒");
            return "future2执行完成";
        });

        CompletableFuture<String> future3 = future1.applyToEither(future2, param -> {
            System.out.println(param);
            return "future3执行完成";
        });
        System.out.println(future3.join());
        /*
        输出结果:
			future2休眠1秒
			future2执行完成
			future3执行完成
		*/
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值