1. 程式人生 > >讀原始碼之-JDK5-Executor

讀原始碼之-JDK5-Executor

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); } } }