36-其他说明
其他说明
本案例用到了 CompletableFuture
类的 complete()
、 get()
、 join()
、 supplyAsync()
、 thenSupplyAsync()
、 thenAcceptAsync()
和 allOf()
方法。但是该类还有许多其他提升灵活性和实用性的方法,下面列举了一些最有意思的方法。
- 使
CompletableFuture
对象进入完备态的方法:除了complete()
方法以外,该类还提供了以下3种方法。cancel()
:该方法将完成CompletableFuture
,并抛出Cancellation Exception
异常。completeAsync()
:该方法将完成CompletableFuture
,其完备值为从参数中传入的Supplier
对象的返回结果。Supplier
对象将由默认执行器中的其他线程执行。completeExceptionally()
:该方法将完成CompletableFuture
,并抛出参数中传入的异常。
- 执行任务的方法:除了
supplyAsync()
方法,该类还提供了以下方法。runAsync()
:该方法是类CompletableFuture
的静态方法,将返回一个CompletableFuture
对象。当参数中传入的Runnable
执行完毕时,该对象将结束,但完备值为空。
- 同步任务的方法:除了
allOf()
、thenAcceptAsync()
和thenApplyAsync()
方法以外,该类还提供了以下方法来同步任务。anyOf()
:该方法是类CompletableFuture
的静态方法。其接收多个CompletableFuture
对象,并返回一个新的CompletableFuture
对象。当有一个参数进入完备态时,该对象就进入完备态,其完备值为参数中第一个进入完备态的对象的完备值。runAfterBothAsync()
:该方法接收一个CompletionStage
对象和一个Runnable
对象作为参数,返回一个新的CompletableFuture
对象。当调用该方法的CompletionStage
和CompletableFuture
对象,均进入完备态时,参数Runnable
将由默认的执行器执行,然后返回的CompletableFuture
对象进入完备态。runAfterEitherAsync()
:虽然该方法与上一个方法类似,但是当调用该方法的CompletionStage
和CompletableFuture
对象时,只要有一个进入完备态,参数Runnable
将会执行。thenAcceptBothAsync():
该方法接收一个CompletionStage
对象和一个BiConsumer
对象作为参数,返回一个新的CompletableFuture
对象。当调用该方法的CompletableFuture
对象和参数CompletionStage
均进入完备态后,BiConsumer
由默认的执行器执行。BiConsumer
接收两个CompletionStage
对象作为参数,无返回值。当BiConsumer
执行完毕时,返回的CompletableFuture
进入完备态。thenCombineAsync()
:该方法接收一个CompletionStage
对象和一个BiConsumer
对象作为参数,返回一个新的CompletableFuture
对象。当调用该方法的CompletableFuture
对象和参数CompletionStage
均进入完备态后,执行BiFunction
对象。BiFunction
对象接收两个刚进入完备态对象的完备值,并返回一个CompletableFuture
对象。thenComposeAsync()
:虽然该方法与thenApplyAsync()
方法类似,但它可以使操作返回一个CompletableFuture
。thenRunAsync()
:虽然该方法与thenAcceptAsync()
方法类似,但是该方法接收一个Runnable
对象作为参数,而不是Consumer
对象。
- 获取完备值的方法:除了
get()
和join()
方法外,该类还提供以下方法来获取完备值。getNow()
:该方法接收的参数类型与CompletableFuture
的完备值类型相同。若调用该方法的对象已经进入完备态,则返回完备值,否则返回参数值。