1、框架定义的接口
Executor框架的接口主要由三个接口定义,Executor、ExecutorService和ScheduledExecutorService
Executor是最上层接口,定义了一个Runnable的任务执行的接口 void execute(Runnable command);
ExecutorService继承自Executor,在其基础上主要做了三方面的扩展:1、定义了检查和结束任务的接口;2、提供了返回Future对象的任务提交接口;3、提供了从任务集合中选取任务进行执行的接口。示例如下
void
shutdown();
List<Runnable> shutdownNow();
boolean
isShutdown();
boolean
isTerminated();
<T> Future<T> submit(Callable<T> task);
Future<?> submit(Runnable task);
<T> Future<T> submit(Runnable task, T result);
<T> List<Future<T>> invokeAll(Collection<?
extends
Callable<T>> tasks)
throws
InterruptedException;
<T> List<Future<T>> invokeAll(Collection<?
extends
Callable<T>> tasks,
long
timeout, TimeUnit unit)
throws
InterruptedException;
ScheduledExecutorService继承自ExecutorService,在其基础上提供了任务执行调度相关的接口:指定延迟时间执行,或者指定间隔顺序执行。接口示例如下
public
<V> ScheduledFuture<V> schedule(Callable<V> callable,
long
delay, TimeUnit unit);
public
ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long
initialDelay,
long
period,
TimeUnit unit);
public
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long
initialDelay,
long
delay,
TimeUnit unit);
2、返回结果接口定义组成
Executor各个任务提交接口的返回结果属于Future结果系统。
Future结果系统最上层由java.util.concurrent.Future接口来定义。在Future中定义了检查任务状态、获取任务执行结果,以及取消任务等相关功能接口。
boolean
isCancelled();
boolean
isDone();
V get()
throws
InterruptedException, ExecutionException;
boolean
cancel(
boolean
mayInterruptIfRunning);
Future下面的基本上可以分成两个方向:一般可执行的Futre任务,以及可调度的Future任务,对应的接口便是RunnableFutre和ScheduledFuture。当然也有同时支持这两个特性的接口,这里只是做一个模糊的分类方向说明。
以上就是Future返回结果系统的一个大致组成,详细的实习将通过FutureTask来进行说明。
3、框架的使用入口
使用Executor时,一般是使用java.util.concurrent包提供的Executors工具类作为入口来构造相应的Executor对象。可以把Executors看成Executor框架的构造工厂,它提供的方法示例如下
public
static
ExecutorService newFixedThreadPool(
int
nThreads) {
return
new
ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new
LinkedBlockingQueue<Runnable>());
}
public
static
ScheduledExecutorService newSingleThreadScheduledExecutor() {
return
new
DelegatedScheduledExecutorService
(
new
ScheduledThreadPoolExecutor(1));
}
public
static
ScheduledExecutorService newScheduledThreadPool(
int
corePoolSize, ThreadFactory threadFactory) {
return
new
ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
}
public
static
ThreadFactory privilegedThreadFactory() {
return
new
PrivilegedThreadFactory();
}
Executors除了提供产生Executor框架接口对象以为,它自己本身也提供了提交任务的接口,可以省去调用者创建Executor对象的过程。相关的方法示例如下
public
static
<T> Callable<T> callable(Runnable task, T result) {
if
(task ==
null
)
throw
new
NullPointerException();
return
new
RunnableAdapter<T>(task, result);
}
4、框架的实现
从Executors的方法上来看,Executor框架的实现主要为ThreadPoolExecutor和ScheduleThreadPoolExecutor。
详细的实现分析参见ThreadPoolExecutor实现分析和ScheduledThreadPoolExecutor实现分析。