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
-
Method Summary
Modifier and TypeMethodDescriptioninvokeAll
(Collection<? extends Callable<T>> tasks) 执行给定的任务,当所有任务完成时返回持有它们状态和结果的Future列表。invokeAll
(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) 执行给定的任务,当所有任务完成或超时到期时,返回持有它们状态和结果的Future列表,以先发生者为准。<T> T
invokeAny
(Collection<? extends Callable<T>> tasks) 执行给定的任务,返回成功完成(即没有抛出异常)的一个任务的结果(如果有的话)。<T> T
invokeAny
(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, wait
Methods 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
- 如果在等待时被中断,此时未完成的任务将被取消
-