前言
- 一种{@link Executor},提供管理终止的方法以及可以产生{@link Future}来跟踪一个或多个异步任务进度的方法。
- 可以关闭{@code ExecutorService},这将导致它拒绝新任务。
- 提供了两种不同的方法来关闭{@code ExecutorService}。
- {@link #shutdown}方法将允许先前提交的任务在终止之前执行,
- 而{@link #shutdownNow}方法可防止等待的任务启动并尝试停止当前正在执行的任务。
- 终止后,执行者将没有正在执行的任务,没有正在等待执行的任务,并且无法提交新任务。
- 应该关闭未使用的{@code ExecutorService}以回收其资源。
- 方法{@code Submit}通过创建并返回一个可用于取消执行和/或等待完成的{@link Future}来扩展基本方法{@link Executor#execute(Runnable)}。
- 方法{@code invokeAny}和{@code invokeAll}执行批量执行的最常用形式,执行一组任务,然后等待至少一个或全部完成。
- (类{@link ExecutorCompletionService}可用于编写这些方法的自定义变体。)
- {@link Executors}类为此包中提供的执行程序服务提供了工厂方法。
源码
package java.util.concurrent;
public interface ExecutorService extends Executor {
/**
* 启动有序关闭,在该关闭中执行先前提交的任务,但不接受任何新任务。如果已关闭,则调用不会产生任何其他影响。
*/
void shutdown();
/**
* 尝试停止所有正在执行的任务,中止正在等待的任务的处理,并返回正在等待执行的任务的列表。
* 此方法不等待主动执行的任务终止。
* 使用{@link
* 除了尽最大努力阻止停止处理正在执行的任务之外,没有任何保证。
* 例如,典型的实现将通过{@link Thread#interrupt}取消,因此任何无法响应中断的任务都可能永远不会终止。
*/
List<Runnable> shutdownNow();
boolean isShutdown();
boolean isTerminated();
/**
* 阻塞直到关闭请求后所有任务完成执行,或者发生超时,或者当前线程被中断(以先发生者为准)。
*/
boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException;
/**
* 提交执行任务的返回值任务,并返回表示任务的未决结果的Future。
* Future的{@code get}方法将在成功完成后返回任务的结果。
* 如果您想立即阻止等待任务,则可以使用以下形式的构造:{@code result = exec.submit(aCallable).get();}
* 注意:{@link Executors}类包含一组方法可以将其他一些类似闭包的常见对象转换为{@link Callable}形式,
* 例如将{@link java.security.PrivilegedAction}转换为{@link Callable}形式。
*/
<T> Future<T> submit(Callable<T> task);
/**
* 提交一个Runnable任务以执行并返回一个代表该任务的Future。 Future的{@code get}方法将在成功完成后返回给定的结果。
*/
<T> Future<T> submit(Runnable task, T result);
/**
* 提交一个Runnable任务以执行并返回一个代表该任务的Future。成功完成后,Future的{@code get}方法将返回{@code null}。
*/
Future<?> submit(Runnable task);
/**
* 执行给定的任务,并在所有任务完成时返回保存其状态和结果的期货列表。
* 对于返回列表的每个元素,{@link Future#isDone}为{@code true}。
* 请注意,已完成的任务可能已正常终止或引发了异常。
* 如果在进行此操作时修改了给定的集合,则此方法的结果不确定。
*/
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException;
/**
* 执行给定的任务,并在所有完成或超时到期时(以先发生者为准)返回持有其状态和结果的期货列表。
* 对于返回列表的每个元素,{@link Future#isDone}为{@code true}。
* 返回时,将取消尚未完成的任务。请注意,已完成的任务可能已正常终止或引发了异常。
* 如果在进行此操作时修改了给定的集合,则此方法的结果不确定。
*/
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException;
/**
* 执行给定的任务,如果成功,则返回成功完成任务的结果(即不引发异常)。
* 在正常或异常返回时,尚未完成的任务将被取消。如果在进行此操作时修改了给定的集合,则此方法的结果不确定。
*/
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException, ExecutionException;
/**
* 执行给定的任务,如果在给定的超时时间结束之前执行了任何任务,则返回已成功完成任务的结果(即没有抛出异常)。
* 在正常或异常返回时,尚未完成的任务将被取消。如果在进行此操作时修改了给定的集合,则此方法的结果不确定。
*/
<T> T invokeAny(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}