讀原始碼之-JDK5-Executor
阿新 • • 發佈:2018-12-16
Executor 的定義
public interface Executor {
void execute(Runnable command);
}
解釋
java.util.concurrent包下對於Executor的一個擴充套件性比較好的實現是ExecutorService。ThreadPoolExecutor類提供了一個可擴充套件的執行緒池的實現,其間接實現了Executor。Executors類提供了許多便利的工廠方法用於建立上述Executor實現類的物件。
實現類
許多Executor的實現類會新增一些關於如何以及何時排程任務的限制。下面將給出一個例子,該例子將提交的任務按照順序依次放到第二個executor中予以排程執行,這體現了一種組合的executor。 設計得十分巧妙,值得借鑑,主要就是利用一個佇列進行儲存提交的任務,然後每個提交過來的任務,對它進行包裝,使得其執行完成後,自動排程佇列中的下一個執行緒任務使之執行,如此妙哉!佩服!
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Excecutor 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();
}
}
public synchronized void scheduleNext() {
if ((active == tasks.poll()) != null)
executor.execute(active);
}
}
}