Executor接口位于java.util.concurrent包中,属于public类型的接口。可以用于提交,管理或者执行Runnable任务。实现Executor接口的class还可以控制Runnable任务执行线程的具体细节。一般来说,Runnable任务开辟在新线程中的使用方法为:
new Thread(new(RunnableTask())).start()
但是在Executor中可以用以下方式使用:
Executor executor = anExecutor;
executor.execute(new RunnableTask1());
executor.execute(new RunnableTask2());
...
Executor并没有严格规定执行Runnable任务的同步/异步状态,以及线程的使用方式,所以一切都相当的自由。你可以在调用线程中直接运行任务,例如:
class DirectExecutor implements Executor {
public void execute(Runnable r) {
r.run();
}
}
或者可以再另一个线程中启动:
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
new Thread(r).start();
}
}
也可以在实现中用另一个Executor来序列化执行过程:
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
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);
}
}
}
另外Executors类提供了工厂方法,ExecutorService提供更多扩展性接口,ThreadPoolExecutor提供线程池支持。