CompletableFuture 详解

CompletableFuture 提供了丰富的方法来异步处理任务。

CompletableFuture.runAsync  用于执行没有返回值的任务,常用于不需要返回结果的业务 void

 public static CompletableFuture<Void> runAsync(Runnable runnable) {
        return asyncRunStage(asyncPool, runnable);
    }

CompletableFuture.supplyAsync 用于执行有返回值的任务 ,  join() 获取任务执行后的返回结果。

CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       return "返回值"
    })
future.join()

获取返回任务值:

// 如果完成则返回结果,否则就抛出具体的异常
public T get() throws InterruptedException, ExecutionException 
 
// 最大时间等待返回结果,否则就抛出具体异常
public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
 
// 完成时返回结果值,否则抛出unchecked异常。为了更好地符合通用函数形式的使用,如果完成此 CompletableFuture所涉及的计算引发异常,则此方法将引发unchecked异常并将底层异常作为其原因
public T join()
 
// 如果完成则返回结果值(或抛出任何遇到的异常),否则返回给定的 valueIfAbsent。
public T getNow(T valueIfAbsent)
 
// 如果任务没有完成,返回的值设置为给定值
public boolean complete(T value)
 
// 如果任务没有完成,就抛出给定异常
public boolean completeExceptionally(Throwable ex) 
  

异步回调处理:thenApply和thenApplyAsync

thenApply 表示某个任务执行完成后执行的动作,即回调方法,会将该任务的执行结果即方法返回值作为入参传递到回调方法中,带有返回值

CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       return "返回值"
    }).thenApply((result)->{
      //对返回结果处理
    })

thenAccept() 方法没有返回值 ,仅用于消费任务结果

CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       return "返回值"
    }).thenAccept(result->{
      //对返回结果处理
    })

allOf() 等待所有任务都完成之后再执行

    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(()->1);
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(()->2);
    CompletableFuture<String> all = CompletableFuture.allOf(future1,future2);
    all.join()
exceptionally() 异常处理:
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       throw new RuntimeException("任务异常");
    })
future.exceptionally(ex->{
  System.out.println(ex.getMessage());
})

 

posted @ 2024-09-11 18:44  山阴路的秋天  阅读(7)  评论(0编辑  收藏  举报