CompletableFuture 异步任务编排

本文详细介绍了 Java 中 CompletableFuture 的使用,包括四个基本的执行方法、异步任务完成时的回调处理、线程串行化以及多任务组合。通过 handle(), whenComplete(), exceptionally() 等方法实现异步任务的回调,使用 thenRun(), thenAccept(), thenApply() 进行线程串行化,以及 runAfterEither(), acceptEither(), applyToEither() 实现任务的组合。同时,探讨了 CompletableFuture.allOf() 和 CompletableFuture.anyOf() 在多任务组合中的应用。" 112932315,10548928,HTML实现圆形头像:简易步骤与代码示例,"['前端开发', 'HTML', 'CSS']
摘要由CSDN通过智能技术生成

一、CompletableFuture 的四个执行方法

  1. runAsync(Runnable runnable): 使用默认线程池(ForkJoinPool)异步执行任务(无返回值)
  2. runAsync(Runnable runnable, Executor executor): 使用自定义线程池执行异步任务(无返回值)
  3. supplyAsync(Supplier supplier): 使用默认线程池(ForkJoinPool)异步执行任务(有返回值)
  4. supplyAsync(Supplier supplier,Executor executor): 使用自定义线程池执行异步任务(有返回值)

二、异步任务完成时回调

方法后面加了 Async 表示异步执行,即从线程池(当未使用自定义线程池时,默认从 ForkJoinPool.commonPool-worker中获取线程)中重新选择线程;如果没有加,表示使用返回当前结果的线程执行

handle() 或 handleAsync()

异步任务执行完成后对结果再次处理 参数为BiFunction 有返回值

private static void handleAsync() throws Exception {
   
      Integer val = CompletableFuture.supplyAsync(() -> {
   
           System.out.println("执行异步任务");
           // 模拟异常情况
           //int i = 1 / 0;
           return 1;
       }).handleAsync((result,exception)->{
   
           //方法执行完成后的处理
           System.out.println("异步任务执行结果:" + result+ "  异常:" + exception);
           
           // 对执行结果二次处理
           if (result!=null) return result+ 100;
           
           return 0;
       }).get();
	// 未发生异常时 执行结果为 101 发生异常情况时 结果为 0
       System.out.println(val);
}

whenComplete() 或 whenCompleteAsync()

方法完成后的感知,无返回值

exceptionally()

仅异步任务执行异常时执行

private static void whenCompleteAsync() throws Exception {
   
     Integer val = CompletableFuture.supplyAsync(() -> {
   
         System.out.println("执行异步任务");
         // 模拟异常情况
         //int i = 1 / 0;
         return 1;
     }).whenCompleteAsync((result, exception) -> {
   
         /**
          * 注意 此处只能获取到异步任务执行结果,无法对结果进行二次处理
          */
         System.out.println("异步任务执行结果:" + result + "  异常:" + exception);

     }).exceptionally((exception) -> {
   
         // 当任务执行异常时,此处才会执行
         System.out.println("异步任务执行异常:" + exception);
         return 0;
     }).get();

   
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值