java.lang.Object
java.util.concurrent.AbstractExecutorService
- 所有已实现的接口:
-
AutoCloseable,Executor,ExecutorService
- 直接已知的子类:
-
ForkJoinPool,ThreadPoolExecutor
提供
ExecutorService执行方法的默认实现。该类使用由newTaskFor返回的RunnableFuture来实现submit、invokeAny和invokeAll方法,默认情况下使用本包中提供的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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioninvokeAll(Collection<? extends Callable<T>> tasks) 执行给定的任务,当所有任务完成时返回持有它们状态和结果的Future列表。invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) 执行给定的任务,当所有任务完成或超时到期时,返回持有它们状态和结果的Future列表,以先发生者为准。<T> TinvokeAny(Collection<? extends Callable<T>> tasks) 执行给定的任务,返回成功完成(即没有抛出异常)的一个任务的结果(如果有的话)。<T> TinvokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) 执行给定的任务,在给定超时到期之前,返回成功完成(即没有抛出异常)的一个任务的结果(如果有的话)。protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) 为给定的可运行任务和默认值返回一个RunnableFuture。protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) 为给定的可调用任务返回一个RunnableFuture。Future<?> 提交一个可运行任务以执行,并返回代表该任务的Future。<T> Future<T> 提交一个可运行任务以执行,并返回代表该任务的Future。<T> Future<T> 提交一个返回值任务以执行,并返回代表任务挂起结果的Future。Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods declared in interface java.util.concurrent.ExecutorService
awaitTermination, close, isShutdown, isTerminated, shutdown, shutdownNow
-
Constructor Details
-
AbstractExecutorService
public AbstractExecutorService()子类调用的构造函数。
-
-
Method Details
-
newTaskFor
为给定的可运行任务和默认值返回一个RunnableFuture。- 类型参数:
-
T- 给定值的类型 - 参数:
-
runnable- 被包装的可运行任务 -
value- 返回的Future的默认值 - 返回:
-
一个
RunnableFuture,当运行时将运行基础可运行任务,并作为Future产生给定值作为其结果,并提供对基础任务的取消 - 自1.6版本起:
- 1.6
-
newTaskFor
为给定的可调用任务返回一个RunnableFuture。- 类型参数:
-
T- 可调用结果的类型 - 参数:
-
callable- 被包装的可调用任务 - 返回:
-
一个
RunnableFuture,当运行时将调用基础可调用任务,并作为Future产生可调用的结果作为其结果,并提供对基础任务的取消 - 自1.6版本起:
- 1.6
-
submit
从接口复制的描述:ExecutorService提交一个可运行任务以执行,并返回代表该任务的Future。Future的get方法在成功完成时将返回null。- 指定者:
-
submit在接口ExecutorService中 - 参数:
-
task- 要提交的任务 - 返回:
- 代表任务待完成的Future
- 抛出:
-
RejectedExecutionException- 如果无法安排任务执行 -
NullPointerException- 如果任务为null
-
submit
从接口复制的描述:ExecutorService提交一个可运行任务以执行,并返回代表该任务的Future。Future的get方法在成功完成时将返回给定的结果。- 指定者:
-
submit在接口ExecutorService中 - 类型参数:
-
T- 结果的类型 - 参数:
-
task- 要提交的任务 -
result- 要返回的结果 - 返回:
- 代表任务待完成的Future
- 抛出:
-
RejectedExecutionException- 如果无法安排任务执行 -
NullPointerException- 如果任务为null
-
submit
从接口复制的描述: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- 如果在等待时被中断,此时未完成的任务将被取消
-