模块 java.base

类 AbstractExecutorService

java.lang.Object
java.util.concurrent.AbstractExecutorService
所有已实现的接口:
AutoCloseable , Executor , ExecutorService
已知子类:
ForkJoinPool , ThreadPoolExecutor

public abstract class AbstractExecutorService extends Object implements ExecutorService
提供 ExecutorService 执行方法的默认实现。此类使用 newTaskFor 返回的 RunnableFuture 实现 submitinvokeAnyinvokeAll 方法,默认为本包中提供的 FutureTask 类。例如,submit(Runnable) 的实现创建了一个关联的 RunnableFuture,它被执行并返回。子类可以覆盖 newTaskFor 方法以返回 RunnableFuture 实现而不是 FutureTask

扩展示例。这是自定义 ThreadPoolExecutor 以使用 CustomTask 类而不是默认 FutureTask 类的草图:

 
 public class CustomThreadPoolExecutor extends ThreadPoolExecutor {

  static class CustomTask<V> implements RunnableFuture<V> { ... }

  protected <V> RunnableFuture<V> newTaskFor(Callable<V> c) {
    return new CustomTask<V>(c);
  }
  protected <V> RunnableFuture<V> newTaskFor(Runnable r, V v) {
    return new CustomTask<V>(r, v);
  }
  // ... add constructors, etc.
 } 
自从:
1.5
  • 构造方法详细信息

    • AbstractExecutorService

      public AbstractExecutorService()
      子类调用的构造方法。
  • 方法详情

    • newTaskFor

      protected <T> RunnableFuture <T> newTaskFor(Runnable  runnable, T value)
      为给定的可运行和默认值返回一个 RunnableFuture
      类型参数:
      T - 给定值的类型
      参数:
      runnable - 正在包装的可运行任务
      value - 返回的未来的默认值
      返回:
      一个 RunnableFuture ,它在运行时将运行底层的可运行对象,并且作为一个 Future ,它将产生给定的值作为其结果并提供取消底层任务
      自从:
      1.6
    • newTaskFor

      protected <T> RunnableFuture <T> newTaskFor(Callable <T> callable)
      为给定的可调用任务返回一个 RunnableFuture
      类型参数:
      T - 可调用结果的类型
      参数:
      callable - 被包装的可调用任务
      返回:
      一个RunnableFuture,它在运行时将调用底层可调用对象,而作为Future,它将产生可调用对象的结果作为其结果,并提供取消底层任务的功能
      自从:
      1.6
    • submit

      public Future <?> submit(Runnable  task)
      从接口 ExecutorService 复制的描述
      提交一个 Runnable 任务以供执行并返回一个代表该任务的 Future。 Future 的 get 方法将在 successful 完成后返回 null
      指定者:
      submit 在接口 ExecutorService
      参数:
      task - 要提交的任务
      返回:
      代表任务未决完成的 Future
      抛出:
      RejectedExecutionException - 如果无法安排任务执行
      NullPointerException - 如果任务为空
    • submit

      public <T> Future <T> submit(Runnable  task, T result)
      从接口 ExecutorService 复制的描述
      提交一个 Runnable 任务以供执行并返回一个代表该任务的 Future。 Future 的 get 方法将在成功完成后返回给定的结果。
      指定者:
      submit 在接口 ExecutorService
      类型参数:
      T - 结果的类型
      参数:
      task - 要提交的任务
      result - 要返回的结果
      返回:
      代表任务未决完成的 Future
      抛出:
      RejectedExecutionException - 如果无法安排任务执行
      NullPointerException - 如果任务为空
    • submit

      public <T> Future <T> submit(Callable <T> task)
      从接口 ExecutorService 复制的描述
      提交一个有返回值的任务以供执行,并返回一个代表任务未决结果的 Future。 Future 的 get 方法将在成功完成后返回任务结果。

      如果你想立即阻塞等待任务,你可以使用 result = exec.submit(aCallable).get(); 形式的结构

      注意:Executors 类包含一组方法,可以将一些其他常见的类似闭包的对象(例如,PrivilegedAction 转换为 Callable 形式)以便提交。

      指定者:
      submit 在接口 ExecutorService
      类型参数:
      T - 任务结果的类型
      参数:
      task - 要提交的任务
      返回:
      代表任务未决完成的 Future
      抛出:
      RejectedExecutionException - 如果无法安排任务执行
      NullPointerException - 如果任务为空
    • invokeAny

      public <T> T invokeAny(Collection <? extends Callable <T>> tasks) throws InterruptedException , ExecutionException
      从接口 ExecutorService 复制的描述
      执行给定的任务,返回成功完成的任务的结果(即,没有抛出异常),如果有的话。在正常或异常返回时,未完成的任务将被取消。如果在执行此操作时修改了给定的集合,则此方法的结果是未定义的。
      指定者:
      invokeAny 在接口 ExecutorService
      类型参数:
      T - 从任务返回的值的类型
      参数:
      tasks - 任务集合
      返回:
      其中一项任务返回的结果
      抛出:
      InterruptedException - 如果在等待时被打断
      ExecutionException - 如果没有任务成功完成
    • invokeAny

      public <T> T invokeAny(Collection <? extends Callable <T>> tasks, long timeout, TimeUnit  unit) throws InterruptedException , ExecutionException , TimeoutException
      从接口 ExecutorService 复制的描述
      执行给定的任务,返回已成功完成的任务的结果(即,没有抛出异常),如果在给定的超时结束之前有任何执行的话。在正常或异常返回时,未完成的任务将被取消。如果在执行此操作时修改了给定的集合,则此方法的结果是未定义的。
      指定者:
      invokeAny 在接口 ExecutorService
      类型参数:
      T - 从任务返回的值的类型
      参数:
      tasks - 任务集合
      timeout - 最长时间等待
      unit - 超时参数的时间单位
      返回:
      其中一项任务返回的结果
      抛出:
      InterruptedException - 如果在等待时被打断
      ExecutionException - 如果没有任务成功完成
      TimeoutException - 如果给定超时在任何任务成功完成之前过去
    • invokeAll

      public <T> List <Future <T>> invokeAll(Collection <? extends Callable <T>> tasks) throws InterruptedException
      从接口 ExecutorService 复制的描述
      执行给定的任务,在所有任务完成时返回一个 Futures 列表,其中包含它们的状态和结果。 Future.isDone() 是返回列表中每个元素的 true。请注意,completed 任务可以正常终止或通过抛出异常终止。如果在执行此操作时修改了给定的集合,则此方法的结果是未定义的。
      指定者:
      invokeAll 在接口 ExecutorService
      类型参数:
      T - 从任务返回的值的类型
      参数:
      tasks - 任务集合
      返回:
      代表任务的 Futures 列表,顺序与迭代器为给定任务列表生成的顺序相同,每个任务都已完成
      抛出:
      InterruptedException - 如果在等待时被打断,在这种情况下未完成的任务将被取消
    • invokeAll

      public <T> List <Future <T>> invokeAll(Collection <? extends Callable <T>> tasks, long timeout, TimeUnit  unit) throws InterruptedException
      从接口 ExecutorService 复制的描述
      执行给定的任务,返回一个 Futures 列表,当所有任务完成或超时到期时(以先发生者为准),保存它们的状态和结果。 Future.isDone() 是返回列表中每个元素的 true。返回时,未完成的任务将被取消。请注意,completed 任务可以正常终止或通过抛出异常终止。如果在执行此操作时修改了给定的集合,则此方法的结果是未定义的。
      指定者:
      invokeAll 在接口 ExecutorService
      类型参数:
      T - 从任务返回的值的类型
      参数:
      tasks - 任务集合
      timeout - 最长时间等待
      unit - 超时参数的时间单位
      返回:
      代表任务的 Futures 列表,其顺序与迭代器为给定任务列表生成的顺序相同。如果操作没有超时,则每个任务都已完成。如果确实超时,则其中一些任务将不会完成。
      抛出:
      InterruptedException - 如果在等待时被打断,在这种情况下未完成的任务将被取消