文章目录
1.概述
根据接口中JDK提供的英文描述,可以知道这个接口提供了将任务提交和任务执行分离开来的方法。
executor.execute(new RunnableTask1());
但是这个接口并不是严格要求任务是异步执行的,可以提交后立马执行。
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);
}
}
}