CompletableFuture使用详解,多线程相关

CompletableFuture笔记

  • 一. 创建异步任务
  • 二.异步回调处理
  • 三.多任务组合处理
  • 四.总结

原文: https://blog.csdn.net/zsx_xiaoxin/article/details/123898171

CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。

一. 创建异步任务

  1. supplyAsync 有返回值
  2. runAsync 无返回值
  3. 获取执行结果
// 如果完成则返回结果,否则就抛出具体的异常
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) 

二.异步回调处理

用来处理顺序的任务,前一个执行完后,在执行后一个,可获取前面的返回值,并返回数据
前一个执行完,再执行当前,将前面返回值作为参数

  1. thenApply和thenApplyAsync: 有参数,有返回值
  2. thenAccept和thenAcceptAsync: 有参数,无返回值
  3. thenRun和thenRunAsync: 无参,无返回值
  4. whenComplete和whenCompleteAsync: 有参(参数中包含异常),无返回值
  5. handle和handleAsync: 有参(参数中包含异常),有返回值

三.多任务组合处理

  1. thenCombine、thenAcceptBoth 和runAfterBoth: 两个任务,都成功再执行下一个; 分别:有参有返回,有参无返回,无参无返回
  2. applyToEither、acceptEither和runAfterEither: 两个任务,一个成功,就执行下一个, 分别:有参有返回,有参无返回,无参无返回
  3. allOf : 多个任务都成功,就执行主线程
  4. anyOf : 多个任务有一个成功,就执行主线程

四.总结

  1. 带apply表示运用,有参,有返回值
  2. 带accept表示接受,有参,无返回值
  3. 带Async表示异步,会另起线程,可以自定义线程池,否则用默认线程池ForkJoinPool.commonPool()
  4. 该类用于对异步方法进行编排,即对多个异步任务 顺序执行、并列执行、条件执行(两者都成功再执行,两者成功一个就执行)
    细节,请看原文,此处只记录下主要使用方法和功能

你可能感兴趣的:(多线程,java)