Module java.base

Class 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方法以返回除FutureTask之外的RunnableFuture实现。

扩展示例。 这是一个自定义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);
   }
   // ... 添加构造函数等。
 }
自1.5版本起:
1.5
  • Constructor Details

    • AbstractExecutorService

      public AbstractExecutorService()
      子类调用的构造函数。
  • Method Details

    • newTaskFor

      protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value)
      为给定的可运行任务和默认值返回一个RunnableFuture
      类型参数:
      T - 给定值的类型
      参数:
      runnable - 被包装的可运行任务
      value - 返回的Future的默认值
      返回:
      一个RunnableFuture,当运行时将运行基础可运行任务,并作为Future产生给定值作为其结果,并提供对基础任务的取消
      自1.6版本起:
      1.6
    • newTaskFor

      protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable)
      为给定的可调用任务返回一个RunnableFuture
      类型参数:
      T - 可调用结果的类型
      参数:
      callable - 被包装的可调用任务
      返回:
      一个RunnableFuture,当运行时将调用基础可调用任务,并作为Future产生可调用的结果作为其结果,并提供对基础任务的取消
      自1.6版本起:
      1.6
    • submit

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

      public <T> Future<T> submit(Runnable task, T result)
      从接口复制的描述: ExecutorService
      提交一个可运行任务以执行,并返回代表该任务的Future。Future的get方法在成功完成时将返回给定的结果。
      指定者:
      submit 在接口 ExecutorService
      类型参数:
      T - 结果的类型
      参数:
      task - 要提交的任务
      result - 要返回的结果
      返回:
      代表任务待完成的Future
      抛出:
      RejectedExecutionException - 如果无法安排任务执行
      NullPointerException - 如果任务为null
    • 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 - 如果任务为null
    • 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
      执行给定的任务,当所有任务完成时返回一个持有它们状态和结果的Future列表。Future.isDone()对返回列表中的每个元素都为true。请注意,一个已完成的任务可能是正常终止,也可能是通过抛出异常终止。如果在此操作进行时修改了给定的集合,则此方法的结果是未定义的。
      指定由:
      invokeAll 在接口 ExecutorService
      类型参数:
      T - 任务返回值的类型
      参数:
      tasks - 任务集合
      返回:
      代表任务的Future列表,与给定任务列表的迭代器产生的顺序相同,每个任务都已完成
      抛出:
      InterruptedException - 如果在等待时被中断,此时未完成的任务将被取消
    • invokeAll

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