ExecutorService的介绍
一个执行器,它提供线程池终止的方法,以及可以产生Future来跟踪一个或多个异步任务进度的方法。
ExecutorService 的继承关系
如下图所示,ExecutorService 接口继承Executor接口,此接口融合了Executor接口的基本方法。并在次基础上延伸出线程池管理的方法和有返回值的执行任务。
ExecutorService接口定义的方法
package java.util.concurrent;
import java.util.List;
import java.util.Collection;
public interface ExecutorService extends Executor {
/**
* 启动程序关闭,线程池不会在接收新的任务,但是会将线程池中剩余未执行的任务全部执行完成后,彻底关闭线程池。
* 此方法不会等待主动执行的任务终止。使用awaitTermination来完成该操作。
*/
void shutdown();
/**
* 立马关闭线程池,调用此方法后,线程池中正在执行的任务会尝试中断,未执行的任务会从队列中出栈。返回正在等待执行的任务列表。
* 此方法不会等待主动执行的任务终止。使用awaitTermination来完成该操作。
*/
List<Runnable> shutdownNow();
/**
* 判读线程池是否关闭
*/
boolean isShutdown();
/**
* 判断线程池是停止
*/
boolean isTerminated();
/**
* 阻塞等到线程池中的所有任务完全执行触发线程池停止操作。设置等待时间,超过此时间后,会抛出中断异常
*/
boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException;
/**
*
* 提交可运行任务以供执行,并返回表示该任务的Future。Future的get方法将在成功完成后返回给定的结果。
*/
<T> Future<T> submit(Callable<T> task);
/**
* 提交可运行任务以供执行,并返回表示该任务的Future。Future的get方法将在成功完成后返回给定的结果。
*/
<T> Future<T> submit(Runnable task, T result);
/**
* 提交可运行任务以供执行,并返回表示该任务的Future。Future的get方法在成功完成后将返回null。
*/
Future<?> submit(Runnable task);
/**
* 执行给定的任务,当所有任务都完成时,返回一个包含其状态和结果的Future列表。Future.isDone()对于返回列表的每个元素都是true。请注意,已完成的任务可以正常终止,也可以通过抛出异常终止。如果在执行此操作时修改了给定的集合,则此方法的结果未定义。
*/
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException;
/**
*执行给定的任务,当所有任务完成或超时到期时(以先发生者为准),返回一个包含其状态和结果的Future列表。Future.isDone()对于返回列表的每个元素都是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;
}
总结
ExecutorService 接口是对Executor接口的增强,提供了线程池管控的方法,并对任务提交的方法进行了增强,接下来将讲解此接口的子类信息