我是靠谱客的博主 悲凉皮卡丘,最近开发中收集的这篇文章主要介绍Java8中CompletableFuture详解1.定义2.supplyAsync3.runAsync4.completedFuture5.isDone6.get7.join8.getNow9.complete10.completeExceptionally11.thenApply12.thenAccept13.thenRun14.thenCombine15.thenAcceptBoth16.runAfterBoth17.applyToEither18.acceptEither19.runAf,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 1.定义
  • 2.supplyAsync
    • 2.1supplyAsync(Supplier)
    • 2.2supplyAsync(Supplier, Executor)
  • 3.runAsync
    • 3.1runAsync(Runnable)
    • 3.2runAsync(Runnable, Executor)
  • 4.completedFuture
  • 5.isDone
  • 6.get
    • 6.1get()
    • 6.2get(long, TimeUnit)
  • 7.join
  • 8.getNow
  • 9.complete
  • 10.completeExceptionally
  • 11.thenApply
    • 11.1thenApply(Function)
    • 11.2thenApplyAsync(Function)
    • 11.3thenApplyAsync(Function, Executor)
  • 12.thenAccept
    • 12.1thenAccept(Consumer)
    • 12.2thenAcceptAsync(Consumer)
    • 12.3thenAcceptAsync(Consumer, Executor)
  • 13.thenRun
    • 13.1thenRun(Runnable)
    • 13.2thenRunAsync(Runnable)
    • 13.3thenRunAsync(Runnable, Executor)
  • 14.thenCombine
    • 14.1thenCombine(CompletionStage, BiFunction)
    • 14.2thenCombineAsync(CompletionStage, BiFunction)
    • 14.3thenCombineAsync(CompletionStage, BiFunction, Executor)
  • 15.thenAcceptBoth
    • 15.1thenAcceptBoth(CompletionStage, BiConsumer)
    • 15.2thenAcceptBothAsync(CompletionStage, BiConsumer)
    • 15.3thenAcceptBothAsync(CompletionStage, BiConsumer, Executor)
  • 16.runAfterBoth
    • 16.1runAfterBoth(CompletionStage, Runnable)
    • 16.2runAfterBothAsync(CompletionStage, Runnable)
    • 16.3runAfterBothAsync(CompletionStage, Runnable, Executor)
  • 17.applyToEither
    • 17.1applyToEither(CompletionStage, Function)
    • 17.2applyToEitherAsync(CompletionStage, Function)
    • 17.3applyToEitherAsync(CompletionStage, Function, Executor)
  • 18.acceptEither
    • 18.1acceptEither(CompletionStage, Consumer)
    • 18.2acceptEitherAsync(CompletionStage, Consumer)
    • 18.3acceptEitherAsync(CompletionStage, Consumer, Executor)
  • 19.runAfterEither
    • 19.1runAfterEither(CompletionStage, Runnable)
    • 19.2runAfterEitherAsync(CompletionStage, Runnable)
    • 19.3runAfterEitherAsync(CompletionStage, Runnable, Executor)
  • 20.thenCompose
    • 20.1thenCompose(Function)
    • 20.2thenComposeAsync(Function)
    • 20.3thenComposeAsync(Function, Executor)
  • 21.whenComplete
    • 21.1whenComplete(BiConsumer)
    • 21.2whenCompleteAsync(BiConsumer)
    • 21.3whenCompleteAsync(BiConsumer, Executor)
  • 22.handle
    • 22.1handle(BiFunction)
    • 22.2handleAsync(BiFunction)
    • 22.3handleAsync(BiFunction, Executor)
  • 23.toCompletableFuture
  • 24.exceptionally
  • 25.allOf
  • 26.anyOf
  • 27.cancel
  • 28.isCancelled
  • 29.isCompletedExceptionally
  • 30.obtrudeValue
  • 31.obtrudeException
  • 32.getNumberOfDependents
  • 33.toString

1.定义

可以明确完成的Future(设置其值和状态),并且可以用作CompletionStage,支持在完成时触发的依赖函数和操作。

当两个或多个线程尝试completecompleteExceptionallycancel一个CompletableFuture时,只有其中一个成功。

除了这些和相关的方法直接操纵状态和结果,CompletableFuture还使用以下策略实现接口CompletionStage

  • 非异步方法的依赖完成提供的操作可以由完成当前CompletableFuture的线程执行,或者由完成方法的任何其它调用者执行。
  • 所有没有明确Executor参数的异步方法都使用ForkJoinPool.commonPool() 执行(除非它不支持至少两个并行级别,在这种情况下,创建一个新的Thread来运行每个任务)。为了简化监视,调试和跟踪,所有生成的异步任务都是标记接口CompletableFuture.AsynchronousCompletionTask的实例。
  • 所有CompletionStage方法都是独立于其它公共方法实现的,因此一个方法的行为不会受到子类中其它方法的重写的影响。

CompletableFuture还使用以下策略实现Future

  • 由于(与FutureTask不同)这个类没有直接控制导致它完成的计算,因此取消被视为异常完成的另一种形式。方法cancel具有相同的效果和completeExceptionally(new CancellationException())。方法isCompletedExceptionally()可用于确定CompletableFuture是否以任何异常方式完成。

  • 如果使用CompletionException进行异常完成,则方法get()get(long, TimeUnit)抛出ExecutionException,其原因与相应的CompletionException中的相同。为了简化大多数上下文中的使用,此类还定义了方法join()getNow(T),它们在这些情况下直接抛出CompletionException。

2.supplyAsync

2.1supplyAsync(Supplier)

public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)

返回一个新的CompletableFuture,由ForkJoinPool.commonPool()中运行的任务异步完成的,其值是通过调用给定的Supplier供应商获得的。

2.2supplyAsync(Supplier, Executor)

public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier,
                                                   Executor executor)

返回一个新的CompletableFuture,由给定执行器中运行的任务异步完成的,其值是通过调用给定的Supplier供应商获得的。

3.runAsync

3.1runAsync(Runnable)

public static CompletableFuture<Void> runAsync(Runnable runnable)

返回一个新的CompletableFuture,在运行给定操作后由ForkJoinPool.commonPool()中运行的任务异步完成的。

3.2runAsync(Runnable, Executor)

public static CompletableFuture<Void> runAsync(Runnable runnable,
                                               Executor executor)

返回一个新的CompletableFuture,在运行给定操作后由给定执行器中运行的任务异步完成的。

4.completedFuture

public static <U> CompletableFuture<U> completedFuture(U value)

返回一个新的CompletableFuture,使用给定值已完成的。

5.isDone

public boolean isDone()

如果以任何方式完成,则返回true:通常,异常或通过取消。

6.get

6.1get()

public T get() throws InterruptedException, ExecutionException

如果需要,等待此future完成,然后返回其结果。

如果这个future被取消,则抛出CancellationException

如果这个future异常完成,则抛出ExecutionException

如果当前线程在等待时被中断,则抛出InterruptedException

6.2get(long, TimeUnit)

public T get(long timeout, TimeUnit unit)
      throws InterruptedException,
             ExecutionException,
             TimeoutException

如果需要,最多在给定时间内等待此future完成,然后返回其结果(如果可用)。

如果这个future被取消,则抛出CancellationException

如果这个future异常完成,则抛出ExecutionException

如果当前线程在等待时被中断,则抛出InterruptedException

如果等待超时,则抛出TimeoutException

7.join

public T join()

完成时返回结果值,如果异常完成则抛出(未经检查的)异常。为了更好地符合常用函数形式的使用,如果完成此CompletableFuture所涉及的计算引发异常,则此方法将抛出(未经检查的)CompletionException,并将底层异常作为其原因。

如果计算被取消,则抛出CancellationException

如果此future异常完成或完成计算引发异常,则抛出CompletionException

8.getNow

public T getNow(T valueIfAbsent)

如果已完成,则返回结果值(或抛出任何遇到的异常),否则返回给定的valueIfAbsent。

如果计算被取消,则抛出CancellationException

如果此future异常完成或完成计算引发异常,则抛出CompletionException

9.complete

public boolean complete(T value)

如果尚未完成,请将get()和相关方法返回的值设置为给定值。

如果此调用导致这个CompletableFuture转换为已完成状态,则返回true,否则返回false

10.completeExceptionally

public boolean completeExceptionally(Throwable ex)

如果尚未完成,则会调用get()和相关方法来抛出给定的异常。

如果此调用导致这个CompletableFuture转换为已完成状态,则返回true,否则返回false

11.thenApply

11.1thenApply(Function)

public <U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当该阶段正常完成时,将使用此阶段的结果作为所提供函数fn的参数执行。有关异常完成的规则,请参阅CompletionStage文档。

fn参数 - 用于计算返回的CompletionStage值的函数

11.2thenApplyAsync(Function)

public <U> CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当该阶段正常完成时,使用此阶段的默认异步执行工具执行,并将该阶段的结果作为所提供函数fn的参数。有关异常完成的规则,请参阅CompletionStage文档。

fn参数 - 用于计算返回的CompletionStage值的函数

11.3thenApplyAsync(Function, Executor)

public <U> CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn,
                                               Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个阶段正常完成时,使用提供的Executor执行,并将该阶段的结果作为所提供函数的参数。有关异常完成的规则,请参阅CompletionStage文档。

fn参数 - 用于计算返回的CompletionStage值的函数

executor参数 - 用于异步执行的执行程序

12.thenAccept

12.1thenAccept(Consumer)

public CompletableFuture<Void> thenAccept(Consumer<? super T> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段的结果作为所提供操作action的参数执行。有关异常完成的规则,请参阅CompletionStage文档。

action参数 - 在完成返回的CompletionStage之前要执行的操作。

12.2thenAcceptAsync(Consumer)

public CompletableFuture<Void> thenAcceptAsync(Consumer<? super T> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,使用此阶段的默认异步执行工具执行,并将该阶段的结果作为所提供操作的参数。有关异常完成的规则,请参阅CompletionStage文档。

action参数 - 在完成返回的CompletionStage之前要执行的操作。

12.3thenAcceptAsync(Consumer, Executor)

public CompletableFuture<Void> thenAcceptAsync(Consumer<? super T> action,
                                               Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个阶段正常完成时,使用提供的Executor执行,并将该阶段的结果作为提供的操作action的参数。有关异常完成的规则,请参阅CompletionStage文档。

action参数 - 在完成返回的CompletionStage之前要执行的操作。

executor参数 - 用于异步执行的执行程序

13.thenRun

13.1thenRun(Runnable)

public CompletableFuture<Void> thenRun(Runnable action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,执行给定的操作。有关异常完成的规则,请参阅CompletionStage文档。

action参数 - 在完成返回的CompletionStage之前要执行的操作。

13.2thenRunAsync(Runnable)

public CompletableFuture<Void> thenRunAsync(Runnable action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,使用此阶段的默认异步执行工具执行给定的操作action。有关异常完成的规则,请参阅CompletionStage文档。

action参数 - 在完成返回的CompletionStage之前要执行的操作。

13.3thenRunAsync(Runnable, Executor)

public CompletableFuture<Void> thenRunAsync(Runnable action,
                                            Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,使用提供的Executor执行给定的操作。有关异常完成的规则,请参阅CompletionStage文档。

action参数 - 在完成返回的CompletionStage之前要执行的操作。

executor参数 - 用于异步执行的执行程序

14.thenCombine

14.1thenCombine(CompletionStage, BiFunction)

public <U,V> CompletableFuture<V> thenCombine(CompletionStage<? extends U> other,
                                              BiFunction<? super T,? super U,? extends V> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个和另一个给定的阶段都正常完成时,执行的两个结果作为所提供函数的参数。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

U - 其它CompletionStage结果的类型

V - 函数的返回类型

other - 另一个CompletionStage

fn - 用于计算返回的CompletionStage值的函数

14.2thenCombineAsync(CompletionStage, BiFunction)

public <U,V> CompletableFuture<V> thenCombineAsync(CompletionStage<? extends U> other,
                                                   BiFunction<? super T,? super U,? extends V> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个和另一个给定的阶段都正常完成时,使用这个阶段的默认异步执行工具执行,其中两个结果作为所提供函数的参数。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

U - 其它CompletionStage结果的类型

V - 函数的返回类型

other - 另一个CompletionStage

fn - 用于计算返回的CompletionStage值的函数

14.3thenCombineAsync(CompletionStage, BiFunction, Executor)

public <U,V> CompletableFuture<V> thenCombineAsync(CompletionStage<? extends U> other,
                                                   BiFunction<? super T,? super U,? extends V> fn,
                                                   Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个和另一个给定的阶段都正常完成时,使用提供的执行程序执行,其中两个结果作为所提供函数的参数。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

U - 其它CompletionStage结果的类型

V - 函数的返回类型

other - 另一个CompletionStage

fn - 用于计算返回的CompletionStage值的函数

executor - 用于异步执行的执行程序

15.thenAcceptBoth

15.1thenAcceptBoth(CompletionStage, BiConsumer)

public <U> CompletableFuture<Void> thenAcceptBoth(CompletionStage<? extends U> other,
                                                  BiConsumer<? super T,? super U> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个和另一个给定的阶段都正常完成时,将执行的两个结果作为提供的操作的参数。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

U - 其它CompletionStage结果的类型

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

15.2thenAcceptBothAsync(CompletionStage, BiConsumer)

public <U> CompletableFuture<Void> thenAcceptBothAsync(CompletionStage<? extends U> other,
                                                       BiConsumer<? super T,? super U> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个和另一个给定的阶段都正常完成时,使用这个阶段的默认异步执行工具执行,其中两个结果作为提供的操作的参数。

参数类型:

U - 其它CompletionStage结果的类型

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

15.3thenAcceptBothAsync(CompletionStage, BiConsumer, Executor)

public <U> CompletableFuture<Void> thenAcceptBothAsync(CompletionStage<? extends U> other,
                                                       BiConsumer<? super T,? super U> action,
                                                       Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当这个和另一个给定的阶段都正常完成时,使用提供的执行程序执行,其中两个结果作为所提供函数的参数。

参数类型:

U - 其它CompletionStage结果的类型

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

executor - 用于异步执行的执行程序

16.runAfterBoth

16.1runAfterBoth(CompletionStage, Runnable)

public CompletableFuture<Void> runAfterBoth(CompletionStage<?> other,
                                            Runnable action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段和另一个给定阶段正常完成时,将执行给定的操作。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

16.2runAfterBothAsync(CompletionStage, Runnable)

public CompletableFuture<Void> runAfterBothAsync(CompletionStage<?> other,
                                                 Runnable action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段和另一个给定阶段正常完成时,将使用此阶段的默认异步执行工具执行给定的操作。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

16.3runAfterBothAsync(CompletionStage, Runnable, Executor)

public CompletableFuture<Void> runAfterBothAsync(CompletionStage<?> other,
                                                 Runnable action,
                                                 Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段和另一个给定阶段正常完成时,将使用提供的执行程序executor执行给定操作。有关异常完成的规则,请参阅CompletionStage文档。

参数类型:

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

executor - 用于异步执行的执行程序

17.applyToEither

17.1applyToEither(CompletionStage, Function)

public <U> CompletableFuture<U> applyToEither(CompletionStage<? extends T> other,
                                              Function<? super T,U> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用相应的结果作为所提供函数fn的参数来执行。有关异常完成的规则,请参阅CompletionStage文档。

U - 函数的返回类型

other - 另一个CompletionStage

fn - 用于计算返回的CompletionStage值的函数

17.2applyToEitherAsync(CompletionStage, Function)

public <U> CompletableFuture<U> applyToEitherAsync(CompletionStage<? extends T> other,
                                                   Function<? super T,U> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用此阶段的默认异步执行工具执行,并将相应的结果作为所提供函数fn的参数。有关异常完成的规则,请参阅CompletionStage文档。

U - 函数的返回类型

other - 另一个CompletionStage

fn - 用于计算返回的CompletionStage值的函数

17.3applyToEitherAsync(CompletionStage, Function, Executor)

public <U> CompletableFuture<U> applyToEitherAsync(CompletionStage<? extends T> other,
                                                   Function<? super T,U> fn,
                                                   Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用提供的执行程序executor执行该过程,并将相应结果作为提供函数fn的参数。有关异常完成的规则,请参阅CompletionStage文档。

U - 函数的返回类型

other - 另一个CompletionStage

fn - 用于计算返回的CompletionStage值的函数

executor - 用于异步执行的执行程序

18.acceptEither

18.1acceptEither(CompletionStage, Consumer)

public CompletableFuture<Void> acceptEither(CompletionStage<? extends T> other,
                                            Consumer<? super T> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用相应的结果作为所提供操作action的参数来执行。有关异常完成的规则,请参阅CompletionStage文档。

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

18.2acceptEitherAsync(CompletionStage, Consumer)

public CompletableFuture<Void> acceptEitherAsync(CompletionStage<? extends T> other,
                                                 Consumer<? super T> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用此阶段的默认异步执行工具执行,并将相应的结果作为所提供操作action的参数。有关异常完成的规则,请参阅CompletionStage文档。

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

18.3acceptEitherAsync(CompletionStage, Consumer, Executor)

public CompletableFuture<Void> acceptEitherAsync(CompletionStage<? extends T> other,
                                                 Consumer<? super T> action,
                                                 Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用提供的执行程序executor执行该过程,并将相应结果作为提供函数的参数。有关异常完成的规则,请参阅CompletionStage文档。

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

executor - 用于异步执行的执行程序

19.runAfterEither

19.1runAfterEither(CompletionStage, Runnable)

public CompletableFuture<Void> runAfterEither(CompletionStage<?> other,
                                              Runnable action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,执行该给定操作。有关异常完成的规则,请参阅CompletionStage文档。

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

19.2runAfterEitherAsync(CompletionStage, Runnable)

public CompletableFuture<Void> runAfterEitherAsync(CompletionStage<?> other,
                                                   Runnable action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用此阶段的默认异步执行工具执行给定操作。有关异常完成的规则,请参阅CompletionStage文档。

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

19.3runAfterEitherAsync(CompletionStage, Runnable, Executor)

public CompletableFuture<Void> runAfterEitherAsync(CompletionStage<?> other,
                                                   Runnable action,
                                                   Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段或另一个给定阶段正常完成时,将使用提供的执行程序执行给定操作。有关异常完成的规则,请参阅CompletionStage文档。

other - 另一个CompletionStage

action - 在完成返回的CompletionStage之前要执行的操作

executor - 用于异步执行的执行程序

20.thenCompose

20.1thenCompose(Function)

public <U> CompletableFuture<U> thenCompose(Function<? super T,? extends CompletionStage<U>> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段作为所提供函数的参数来执行。有关异常完成的规则,请参阅CompletionStage文档。

U - 返回的CompletionStage结果的类型

fn - 该函数返回一个新的CompletionStage

20.2thenComposeAsync(Function)

public <U> CompletableFuture<U> thenComposeAsync(Function<? super T,? extends CompletionStage<U>> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段的默认异步执行工具将其作为提供的函数的参数来执行。有关异常完成的规则,请参阅CompletionStage文档。

U - 返回的CompletionStage结果的类型

fn - 该函数返回一个新的CompletionStage

20.3thenComposeAsync(Function, Executor)

public <U> CompletableFuture<U> thenComposeAsync(Function<? super T,? extends CompletionStage<U>> fn,
                                                 Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常完成时,将使用提供的执行程序Executor执行此阶段,并将该阶段的结果作为提供的函数的参数。有关异常完成的规则,请参阅CompletionStage文档。

U - 返回的CompletionStage结果的类型

fn - 该函数返回一个新的CompletionStage

executor - 用于异步执行的执行程序

21.whenComplete

21.1whenComplete(BiConsumer)

public CompletableFuture<T> whenComplete(BiConsumer<? super T,? super Throwable> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,与此阶段具有相同的结果或异常,当此阶段完成时将执行给定的操作。

当此阶段完成时,以此阶段的结果(如果没有则为null)和异常(如果没有则为null)作为参数来调用给定操作。返回阶段在操作返回时完成。如果提供的操作本身遇到异常,那么除非此阶段也异常完成,否则返回的阶段将异常完成。

action - 执行的操作

21.2whenCompleteAsync(BiConsumer)

public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? super Throwable> action)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,与此阶段具有相同的结果或异常,当此阶段完成时将使用此阶段的默认异步执行工具执行给定的动作。

当此阶段完成时,以此阶段的结果(如果没有则为null)和异常(如果没有则为null)作为参数来调用给定操作。返回阶段在操作返回时完成。如果提供的操作本身遇到异常,那么除非此阶段也异常完成,否则返回的阶段将异常完成。

action - 执行的操作

21.3whenCompleteAsync(BiConsumer, Executor)

public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? super Throwable> action,
                                              Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,与此阶段具有相同的结果或异常,当此阶段完成时将使用提供的Executor执行给定的操作。

当此阶段完成时,以此阶段的结果(如果没有则为null)和异常(如果没有则为null)作为参数来调用给定操作。返回阶段在操作返回时完成。如果提供的操作本身遇到异常,那么除非此阶段也异常完成,否则返回的阶段将异常完成。

action - 执行的操作

executor - 用于异步执行的执行程序

22.handle

22.1handle(BiFunction)

public <U> CompletableFuture<U> handle(BiFunction<? super T,Throwable,? extends U> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常或异常完成时,将使用此阶段的结果和异常作为所提供函数的参数来执行。

当此阶段完成时,以此阶段的结果(如果没有则为null)和异常(如果没有则为null)作为参数来调用给定函数,并使用函数的结果来完成返回的阶段。

U - 函数的返回类型

fn - 用于计算返回的CompletionStage值的函数

22.2handleAsync(BiFunction)

public <U> CompletableFuture<U> handleAsync(BiFunction<? super T,Throwable,? extends U> fn)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常或异常完成时,将使用此阶段的默认异步执行工具执行它,并将此阶段的结果和异常作为所提供函数的参数。

当此阶段完成时,以此阶段的结果(如果没有则为null)和异常(如果没有则为null)作为参数来调用给定函数,并使用函数的结果来完成返回的阶段。

U - 函数的返回类型

fn - 用于计算返回的CompletionStage值的函数

22.3handleAsync(BiFunction, Executor)

public <U> CompletableFuture<U> handleAsync(BiFunction<? super T,Throwable,? extends U> fn,
                                            Executor executor)

从接口复制的描述: CompletionStage

返回一个新的CompletionStage,当此阶段正常或异常完成时,将使用提供的执行程序执行此阶段,并将此阶段的结果和异常作为提供函数的参数。

当此阶段完成时,以此阶段的结果(如果没有则为null)和异常(如果没有则为null)作为参数来调用给定函数,并使用函数的结果来完成返回的阶段。

U - 函数的返回类型

fn - 用于计算返回的CompletionStage值的函数

executor - 用于异步执行的执行程序

23.toCompletableFuture

public CompletableFuture<T> toCompletableFuture()

返回此CompletableFuture。

24.exceptionally

public CompletableFuture<T> exceptionally(Function<Throwable,? extends T> fn)

返回一个新的CompletableFuture,它在此CompletableFuture完成时完成,当异常完成时,异常给定函数的结果将触发此CompletableFuture的完成;否则,如果此CompletableFuture正常完成,则返回的CompletableFuture也将使用相同的值正常完成。注意:可使用whenCompletehandle方法使用此功能的更灵活版本。

fn - 如果此CompletableFuture异常完成,则用于计算返回的CompletableFuture的值的函数

25.allOf

public static CompletableFuture<Void> allOf(CompletableFuture<?>... cfs)

返回一个新的CompletableFuture,当所有给定的CompletableFutures完成时,它就完成了。如果给定的CompletableFuture中的任何一个异常完成,则返回的CompletableFuture也会这样做,CompletionException将此异常作为其原因。否则,给定CompletableFuture的结果(如果有)不会反映在返回的CompletableFuture中,而是可以通过单独检查它们来获得。如果未提供CompletableFutures,则返回以null值完成的CompletableFuture。
此方法的应用之一是在继续一个程序之前等待一组独立的CompletableFutures的完成,例如: CompletableFuture.allOf(c1, c2, c3).join();

26.anyOf

public static CompletableFuture<Object> anyOf(CompletableFuture<?>... cfs)

返回一个新的CompletableFuture,它在任何一个给定的CompletableFutures完成时完成,并具有相同的结果。否则,如果异常完成,则返回的CompletableFuture也会这样做,CompletionException将此异常作为其原因。如果未提供CompletableFuture,则返回不完整的CompletableFuture。

返回:返回一个新的CompletableFuture,它在完成给定CompletableFutures中的任何一个的结果或异常时完成。

如果数组或其任何元素为null,抛出NullPointerException

27.cancel

public boolean cancel(boolean mayInterruptIfRunning)

如果尚未完成,请使用CancellationException完成此CompletableFuture。尚未完成的依赖CompletableFutures也将异常完成,此CancellationException导致CompletionException

mayInterruptIfRunning - 此值在此实现中无效,因为不使用中断来控制处理。

返回:true 如果此任务现在被取消

28.isCancelled

public boolean isCancelled()

如果此CompletableFuture在正常完成之前被取消,则返回 true

29.isCompletedExceptionally

public boolean isCompletedExceptionally()

如果此CompletableFuture以任何方式异常完成,则返回true。可能的原因包括取消,completeExceptionally的显式调用以及CompletionStage操作的突然终止。

返回:true如果此CompletableFuture异常完成

30.obtrudeValue

public void obtrudeValue(T value)

强制设置或重置随后由方法get()和相关方法返回的值,无论是否已完成。此方法仅设计用于错误恢复操作,即使在这种情况下,使用已建立的结果或覆盖的结果也可能导致正在进行的相关完成。

31.obtrudeException

public void obtrudeException(Throwable ex)

强制导致对方法get()和相关方法的后续调用抛出给定的异常,无论是否已完成。此方法仅设计用于错误恢复操作,即使在这种情况下,使用已建立的结果或覆盖的结果也可能导致正在进行的相关完成。

如果异常为null则抛出NullPointerException

32.getNumberOfDependents

public int getNumberOfDependents()

返回其完成等待此CompletableFuture完成的CompletableFutures的估计数量。此方法设计用于监视系统状态,而不用于同步控制。

返回:依赖的CompletableFuture的数量。

33.toString

public String toString()

返回标识此CompletableFuture的字符串及其完成状态。括号中的状态包含字符串 “Completed Normally”“正常完成”)或字符串 “Completed Exceptionally”(“异常完成”),或字符串 “Not completed”(“未完成”),其后是取决于完成情况的CompletableFuture数量(如果有)。

本文参考:

CompletableFuture (Java Platform SE 8 )

最后

以上就是悲凉皮卡丘为你收集整理的Java8中CompletableFuture详解1.定义2.supplyAsync3.runAsync4.completedFuture5.isDone6.get7.join8.getNow9.complete10.completeExceptionally11.thenApply12.thenAccept13.thenRun14.thenCombine15.thenAcceptBoth16.runAfterBoth17.applyToEither18.acceptEither19.runAf的全部内容,希望文章能够帮你解决Java8中CompletableFuture详解1.定义2.supplyAsync3.runAsync4.completedFuture5.isDone6.get7.join8.getNow9.complete10.completeExceptionally11.thenApply12.thenAccept13.thenRun14.thenCombine15.thenAcceptBoth16.runAfterBoth17.applyToEither18.acceptEither19.runAf所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部