是一个接口,并有一个方法。定义了所有实现Executor的对象,都提供将"任务提交"和"任务运行机制"分离的execute方法。一般来说,使用Executor的executor方法执行任务。而不用new Thread的方法。
但是这个方法并没有要求execute在异步执行,最简单的情形就是在调用者的线程运行。
class DirectExecutor implements Executor {
public void execute(Runnable r) {
r.run();
}
}
也可以在其他线程运行
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
}
也可以对任务进行限制和安排
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
ExecutorService是一个扩展接口,规定了一些更具体的功能。而ThreadPoolExecutor用线程池的方式实现了ExecutorService。Executors是一个工厂类,提供了各种Executor,也有熟悉的线程池。
总的来说,这个接口是一个顶层接口,目的是分离任务提交和任务的执行机制,具体什么机制需要去实现,其中API中的线程池就是有实现这个接口,实现了池的任务执行机制。
网友评论