您当前的位置: 首页 > 

顧棟

暂无认证

  • 0浏览

    0关注

    227博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【JUC系列】Executor框架之CompletionFuture

顧棟 发布时间:2022-06-22 06:00:00 ,浏览量:0

JUC系列Executor框架之CompletionFuture

文章目录
  • JUC系列Executor框架之CompletionFuture
    • CompletionStage
      • 接口方法如下
    • CompletableFuture
    • CompletableFuture组成
      • 成员变量
      • 主要方法
        • 异步方法
        • 依赖关系
        • 集合关系
        • 聚合关系
        • 并行执行
        • 获取结果
        • 结果处理
    • 任务类型的转换
      • 四种任务原型
      • CompletableFuture内部类集成关系
      • 转换方法
    • 任务链式执行过程分析
    • CompletableFuture示例

需要优先阅读

【JUC系列】Executor框架之FutureTask

【JUC系列】Executor框架之CompletionService

CompletionStage

可能是异步计算的一个阶段,它在另一个 CompletionStage 完成时执行一个操作或计算一个值。 一个阶段在其计算终止时完成,但这可能反过来触发其他相关阶段。 此接口中定义的功能仅采用几种基本形式,可扩展为更大的方法集以捕获一系列使用风格:

  • 阶段执行的计算可以表示为 Function、Consumer 或 Runnable(分别使用名称包括 apply、accept 或 run 的方法),具体取决于它是否需要参数和/或产生结果。 例如 stage.thenApply(x -> square(x)).thenAccept(x -> System.out.print(x)).thenRun(() -> System.out.println())。 另一种形式(compose)应用阶段本身的功能,而不是它们的结果。
  • 一个阶段的执行可以由单个阶段的完成触发,也可以由两个阶段的完成触发,或者两个阶段中的任一个触发。 使用带有前缀 then 的方法来排列单个阶段的依赖关系。 由两个阶段完成触发的那些可以使用相应命名的方法组合它们的结果或效果。 由两个阶段中的任何一个触发的那些不保证哪些结果或效果用于从属阶段的计算。
  • 阶段之间的依赖关系控制计算的触发,但不保证任何特定的顺序。 此外,新阶段计算的执行可以通过以下三种方式中的任何一种进行安排:默认执行、默认异步执行(使用带有后缀 async 的方法,该方法采用阶段的默认异步执行工具)或自定义(通过提供的 Executor)。 默认和异步模式的执行属性由 CompletionStage 实现指定,而不是此接口。 具有显式 Executor 参数的方法可能具有任意执行属性,甚至可能不支持并发执行,但以适应异步的方式安排处理。
  • 两种方法形式支持处理触发阶段是正常完成还是异常完成:方法 whenComplete 允许注入动作而不管结果如何,否则在完成时保留结果。方法句柄还允许阶段计算替换结果,该结果可以允许其他相关阶段进行进一步处理。在所有其他情况下,如果某个阶段的计算因(未经检查的)异常或错误而突然终止,则所有需要其完成的相关阶段也会异常完成,并且 CompletionException 将异常作为其原因。如果一个阶段依赖于两个阶段,并且都异常完成,那么 CompletionException 可能对应于这些异常中的任何一个。如果一个阶段依赖于其他两个阶段中的任何一个,并且其中只有一个异常完成,则无法保证依赖阶段是正常完成还是异常完成。在方法 whenComplete 的情况下,当提供的操作本身遇到异常时,如果尚未异常完成,则阶段异常完成此异常。

所有方法都遵循上述触发、执行和异常完成规范(在单个方法规范中不再重复)。 此外,虽然用于为接受它们的方法传递完成结果(即,对于 T 类型的参数)的参数可能为 null,但为任何其他参数传递 null 值将导致引发 NullPointerException。 该接口未定义初始创建、正常或异常强制完成、探测完成状态或结果或等待阶段完成的方法。 CompletionStage 的实现可以酌情提供实现这种效果的方法。 方法 toCompletableFuture 通过提供一个通用的转换类型来实现此接口的不同实现之间的互操作性。

接口方法如下 方法说明 CompletionStage thenApply(Function other, Runnable action)返回一个新的 CompletionStage,当这个阶段和另一个给定阶段都正常完成时,执行给定的操作。CompletionStage runAfterBothAsync(CompletionStage other, Runnable action)返回一个新的 CompletionStage,当此阶段和另一个给定阶段正常完成时,使用此阶段的默认异步执行工具执行给定操作。CompletionStage runAfterBothAsync(CompletionStage other, Runnable action, Executor executor)返回一个新的 CompletionStage,当这个阶段和另一个给定阶段正常完成时,使用提供的执行器执行给定的操作。 CompletionStage applyToEither (CompletionStage other, Runnable action)返回一个新的 CompletionStage,当此阶段或其他给定阶段正常完成时,将执行给定操作。CompletionStage runAfterEitherAsync (CompletionStage other, Runnable action)返回一个新的 CompletionStage,当此阶段或其他给定阶段正常完成时,使用此阶段的默认异步执行工具执行给定操作。CompletionStage runAfterEitherAsync (CompletionStage other, Runnable action, Executor executor)返回一个新的 CompletionStage,当此阶段或其他给定阶段正常完成时,使用提供的执行程序执行给定操作。 CompletionStage thenCompose (Function
关注
打赏
1663402667
查看更多评论
立即登录/注册

微信扫码登录

0.0417s