先看其父接口Executor。
public interface Executor {
/**
* Executes the given command at some time in the future. The command
* may execute in a new thread, in a pooled thread, or in the calling
* thread, at the discretion of the {@code Executor} implementation.
*
* @param command the runnable task
* @throws RejectedExecutionException if this task cannot be
* accepted for execution
* @throws NullPointerException if command is null
*/
void execute(Runnable command);
}
该接口只有一个方法,接收一个Runnable实例,在线程池里执行该Runnable。
这个接口的作用是:将任务的提交与执行解耦。使用者只需要往一个Executor实例里扔任务即可,具体的执行细节已经被隐藏。
接着看下ExecutorService接口:
该接口继承了Executor接口,另外做了扩展,主要是提供了对线程池资源的管理能力。这包括两个方法:shutdown以及shutdownnow两个方法。
其中shutdown方法仅仅让线程池停止接收新的任务,新的任务被拒绝策略处理,默认是抛出异常。
而shutdownnow方法还会停止当前正在处理的任务,清空任务队列。但是并不能够保证停止当前任务的执行,从实现上来说,仅仅是调用线程的intercept方法,如果任务没有响应中断信号,那么就无法停止了。另外,该方法会返回队列里的任务。
最后还有一个方法awaitTermination,该方法是阻塞的,作用是在调用了shutdown方法后,等待当前任务执行完成直到超时。
后面介绍下实现。