当前位置:嗨网首页>书籍在线阅读

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 对象。当调用该方法的 CompletionStageCompletableFuture 对象,均进入完备态时,参数 Runnable 将由默认的执行器执行,然后返回的 CompletableFuture 对象进入完备态。
    • runAfterEitherAsync() :虽然该方法与上一个方法类似,但是当调用该方法的 CompletionStageCompletableFuture 对象时,只要有一个进入完备态,参数 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 的完备值类型相同。若调用该方法的对象已经进入完备态,则返回完备值,否则返回参数值。