返回

图解CompletableFuture源码,初探CompletableFuture用法与实现

后端

CompletableFuture源码解析

属性部分

首先我们来看一下CompletableFuture的属性部分,属性部分包含了以下几个属性:

  • private volatile Object value; // 当前CompletableFuture包含的结果。
  • private Throwable throwable; // 当CompletableFuture计算遇到异常时,会把异常信息保存在throwable中。
  • private volatile int state; // 当前CompletableFuture的状态。
  • private boolean used; // 是否已经被使用过。
  • private WaitNode waiters; // 等待结果的线程。

构造函数部分

CompletableFuture的构造函数主要有以下几个:

  • CompletableFuture(); // 无参构造函数。
  • CompletableFuture(Executor executor); // 带有线程池的构造函数。
  • CompletableFuture(Supplier<? extends T> supplier); // 带有任务的构造函数。
  • CompletableFuture(CompletionStage<? extends T> stage); // 带有另一个CompletableFuture的构造函数。

方法部分

CompletableFuture的方法主要有以下几个:

  • get(); // 等待CompletableFuture计算完成,并返回结果。
  • get(long timeout, TimeUnit unit); // 等待CompletableFuture计算完成,并返回结果,带有超时时间。
  • join(); // 等待CompletableFuture计算完成,不返回结果。
  • complete(T value); // 手动完成CompletableFuture,并设置结果。
  • completeExceptionally(Throwable throwable); // 手动完成CompletableFuture,并设置异常。
  • cancel(boolean mayInterruptIfRunning); // 取消CompletableFuture的计算。
  • isDone(); // 判断CompletableFuture是否已经完成。
  • isCancelled(); // 判断CompletableFuture是否已经被取消。
  • isCompletedExceptionally(); // 判断CompletableFuture是否因为异常而完成。
  • thenApply(Function<? super T, ? extends U> fn); // 把CompletableFuture的结果作为参数,应用到fn函数上,并返回一个新的CompletableFuture。
  • thenAccept(Consumer<? super T> action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
  • thenRun(Runnable action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
  • exceptionally(Function<Throwable, ? extends T> fn); // 当CompletableFuture计算遇到异常时,把异常信息作为参数,应用到fn函数上,并返回一个新的CompletableFuture。

源码实现部分

CompletableFuture的源码实现主要包含以下几个部分:

  • 属性部分
  • 构造函数部分
  • 方法部分

属性部分

CompletableFuture的属性部分主要包含了以下几个属性:

  • private volatile Object value; // 当前CompletableFuture包含的结果。
  • private Throwable throwable; // 当CompletableFuture计算遇到异常时,会把异常信息保存在throwable中。
  • private volatile int state; // 当前CompletableFuture的状态。
  • private boolean used; // 是否已经被使用过。
  • private WaitNode waiters; // 等待结果的线程。

构造函数部分

CompletableFuture的构造函数主要有以下几个:

  • CompletableFuture(); // 无参构造函数。
  • CompletableFuture(Executor executor); // 带有线程池的构造函数。
  • CompletableFuture(Supplier<? extends T> supplier); // 带有任务的构造函数。
  • CompletableFuture(CompletionStage<? extends T> stage); // 带有另一个CompletableFuture的构造函数。

方法部分

CompletableFuture的方法主要有以下几个:

  • get(); // 等待CompletableFuture计算完成,并返回结果。
  • get(long timeout, TimeUnit unit); // 等待CompletableFuture计算完成,并返回结果,带有超时时间。
  • join(); // 等待CompletableFuture计算完成,不返回结果。
  • complete(T value); // 手动完成CompletableFuture,并设置结果。
  • completeExceptionally(Throwable throwable); // 手动完成CompletableFuture,并设置异常。
  • cancel(boolean mayInterruptIfRunning); // 取消CompletableFuture的计算。
  • isDone(); // 判断CompletableFuture是否已经完成。
  • isCancelled(); // 判断CompletableFuture是否已经被取消。
  • isCompletedExceptionally(); // 判断CompletableFuture是否因为异常而完成。
  • thenApply(Function<? super T, ? extends U> fn); // 把CompletableFuture的结果作为参数,应用到fn函数上,并返回一个新的CompletableFuture。
  • thenAccept(Consumer<? super T> action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
  • thenRun(Runnable action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
  • exceptionally(Function<Throwable, ? extends T> fn); // 当CompletableFuture计算遇到异常时,把异常信息作为参数,应用到fn函数上,并返回一个新的CompletableFuture。