文章目錄
- 1.定義
- 2.supplyAsync
- 3.runAsync
- 4.completedFuture
- 5.isDone
- 6.get
- 7.join
- 8.getNow
- 9.complete
- 10.completeExceptionally
- 11.thenApply
- 12.thenAccept
- 13.thenRun
- 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
- 21.whenComplete
- 21.1whenComplete(BiConsumer)
- 21.2whenCompleteAsync(BiConsumer)
- 21.3whenCompleteAsync(BiConsumer, Executor)
- 22.handle
- 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
,支持在完成時觸發的依賴函數和操作。
當兩個或多個線程嘗試complete
,completeExceptionally
或cancel
一個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也將使用相同的值正常完成。注意:可使用whenComplete
和handle
方法使用此功能的更靈活版本。
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數量(如果有)。
本文參考: