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的完备值类型相同。若调用该方法的对象已经进入完备态,则返回完备值,否则返回参数值。