JUC(一)异步调用CompletableFuture

1. 有返回值的异步调用CompletableFuture.supplyAsync()

1. 代码示例

//有返回值的异步调用
CompletableFuture<Integer> completableFutureSupply = CompletableFuture.supplyAsync(() -> {
    System.out.println(Thread.currentThread().getName() + "  supplyAsync => Integer");
    int i = 10/1;
    return 1024;
});

2.获取返回值

System.out.println(completableFutureSupply.get());
//输出结果-> 1024

3.异步方法中报错处理

  • 这里我们模拟一下代码块中报错之后如何返回
1.写个异常(被除数为整型时不可为零
  • 我这里将被除数改成0
//有返回值的异步调用
CompletableFuture<Integer> completableFutureSupply = CompletableFuture.supplyAsync(() -> {
    System.out.println(Thread.currentThread().getName() + "  supplyAsync => Integer");
    int i = 10/0;
    return 1024;
});
  • 这里运行直接报错 (附图)
    在这里插入图片描述
2. 使用whenComplete解决异常后返回值的问题
System.out.println(completableFutureSupply.whenComplete((t, u) -> {
   System.out.println("t=" + t);
   System.out.println("u=" + u);
}).exceptionally((e) -> {
    System.out.println("ex:"+e.getMessage());
    return 233;
}).get());

在这里插入图片描述

  • 这里代码依旧还是出现异常,但是我们在异常代码块中给他定义了一个报错还可以正常返回的默认值
  • t =正常返回值
  • u=异常信息
  • e=异常信息
1.无异常情况,我这边将被除数改回非0

在这里插入图片描述

2.异步调用CompletableFuture.runAsync()

CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(() -> {
    try {
        TimeUnit.SECONDS.sleep(2);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName() + "  runAsync => Void");
});
completableFuture.get();//阻塞获取执行结果
//批量阻塞(等待)
CompletableFuture.allOf(completableFuture,completableFuture1).join();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fate急速出击

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值