类 StructuredTaskScope.ShutdownOnSuccess<T>

java.lang.Object
jdk.incubator.concurrent.StructuredTaskScope <T>
jdk.incubator.concurrent.StructuredTaskScope.ShutdownOnSuccess<T>
类型参数:
T - 结果类型
所有已实现的接口:
AutoCloseable
封闭类:
StructuredTaskScope<T>

public static final class StructuredTaskScope.ShutdownOnSuccess<T> extends StructuredTaskScope <T>
一个 StructuredTaskScope 捕获第一个子任务成功完成的结果。捕获后,它会调用 shutdown 方法来中断未完成的线程并唤醒所有者。此类实现的策略适用于任何子任务的结果都可以(“调用任何”)以及不再需要其他未完成的子任务的结果的情况。

除非另有说明,否则将 null 参数传递给此类中的方法将导致抛出 NullPointerException

自从:
19
  • 构造方法详细信息

    • ShutdownOnSuccess

      public ShutdownOnSuccess(String  name, ThreadFactory  factory)
      使用给定的名称和线程工厂构造一个新的 ShutdownOnSuccess。出于监视和管理的目的,可选择命名任务范围。当任务为 forked 时,线程工厂用于 create 线程。任务范围由当前线程拥有。

      此方法捕获当前线程的 作用域值 绑定,以供在任务范围内创建的线程继承。类描述中的 树结构 部分详细说明了如何为继承作用域值绑定而隐式建立父子关系。

      参数:
      name - 任务范围的名称,可以为空
      factory - 线程工厂
    • ShutdownOnSuccess

      public ShutdownOnSuccess()
      构造一个新的未命名的 ShutdownOnSuccess 来创建虚拟线程。

      此构造函数等效于调用名称为 null 的 2-arg 构造函数和创建虚拟线程的线程工厂。

  • 方法详情

    • handleComplete

      protected void handleComplete(Future <T > future)
      第一次使用 Future 调用时关闭给定的任务范围以完成任务并返回结果。
      重写:
      handleComplete 在类 StructuredTaskScope<T>
      参数:
      future - 完成的任务
      参见:
    • join

      等待所有线程完成或任务范围关闭。此方法等待任务范围内启动的所有线程完成执行(任务和 handleComplete 方法),调用 shutdown 方法关闭任务范围,或者当前线程为 interrupted

      此方法只能由任务范围所有者调用。

      重写:
      join 在类 StructuredTaskScope<T>
      返回:
      此任务范围
      抛出:
      IllegalStateException - 如果此任务范围已关闭
      WrongThreadException - 如果当前线程不是所有者
      InterruptedException - 如果在等待时被打断
    • joinUntil

      等待所有线程完成或任务范围关闭,直到给定的截止日期。此方法等待任务作用域中启动的所有线程完成执行(任务和 handleComplete 方法),调用 shutdown 方法关闭任务作用域,当前线程为 interrupted ,或达到截止日期。

      此方法只能由任务范围所有者调用。

      重写:
      joinUntil 在类 StructuredTaskScope<T>
      参数:
      deadline - 截止日期
      返回:
      此任务范围
      抛出:
      IllegalStateException - 如果此任务范围已关闭
      WrongThreadException - 如果当前线程不是所有者
      InterruptedException - 如果在等待时被打断
      TimeoutException - 如果在等待时达到截止日期
    • result

      public T  result() throws ExecutionException
      返回以结果完成的第一个子任务的结果。

      当没有子任务以结果完成但任务以异常完成时,将抛出 ExecutionException,异常为 原因。如果只有取消的子任务被通知给 handleComplete 方法然后 CancellationException 被抛出。

      API 注意:
      此方法旨在由任务范围所有者在调用 join (或 joinUntil )后调用。未来的版本可能会增加强制执行以防止其他线程或在加入之前调用该方法。
      返回:
      以结果完成的第一个子任务的结果
      抛出:
      ExecutionException - 如果没有子任务以结果完成但子任务以异常完成
      CancellationException - 如果所有子任务都被取消
      IllegalStateException - 如果未使用已完成的子任务调用 handle 方法
    • result

      public <X extends Throwable > T  result(Function <Throwable ,? extends X> esf) throws X
      返回第一个以结果完成的子任务的结果,否则抛出由给定异常提供函数产生的异常。

      当没有子任务以结果完成但子任务以异常完成时,异常提供函数将被调用并带有异常。如果只有取消的子任务被通知给 handleComplete 方法,那么异常提供函数将被调用 CancellationException

      API 注意:
      此方法旨在由任务范围所有者在调用 join (或 joinUntil )后调用。未来的版本可能会增加强制执行以防止其他线程或在加入之前调用该方法。
      类型参数:
      X - 要抛出的异常类型
      参数:
      esf - 异常提供函数
      返回:
      以结果完成的第一个子任务的结果
      抛出:
      X - 如果没有子任务完成并有结果
      IllegalStateException - 如果未使用已完成的子任务调用 handle 方法