相關類Executor,Executors,AbstractExecutorService,ExecutorService
Executor:整個線程池執行者框架的頂層接口。定義了一個execute方法,整個線程執行者框架的核心方法。
public interface Executor {
void execute(Runnable command);
}
ExecutorService:這是一個接口它繼承自Executor,定義了shutdown,shutdownNow,awaitTermination,submit,invokeAll等方法。
AbstractExecutorService:實現了ExecutorService接口中的submit,invokeAll的方法。
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Runnable task, T result) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Callable<T> task) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task);
execute(ftask);
return ftask;
}
在這裡,所有submit方法提交的任務最終還是調用了execute方法,execute是接口Executor中定義的方法,AbstractExecutorService沒有實現它,
需要子類去實現這個方法,ThreadPoolExecutor繼承了AbstractExecutorService,它實現了execute方法。ScheduledThreadPoolExecutor繼承自
ThreadPoolExecutor,並覆蓋了ThreadPoolExecutor的execute方法。這個方法是線程執行框者架的核心邏輯,不同的線程池執行者有不同的實現邏輯。
AbstractExecutorService的功能較為簡單,實現了不同參數的submit,invokeAll方法。
ThreadPoolExecutor線程池執行者:它有一個核心的成員變量:
private final HashSet<Worker> workers = new HashSet<Worker>();
workers可以看做是ThreadPoolExecutor中用於運行任務的線程池。
worker是一個封裝了一個Thread對象並實現了Runnable接口的類。封裝Thread很容易理解,因為它要利用Thread去運行execute方法提交過來的runnable任務,但是為什麼會繼承runnable接口呢?
--------------------------------------分割線 --------------------------------------
大話設計模式(帶目錄完整版) PDF+源代碼 http://www.linuxidc.com/Linux/2014-08/105152.htm
Java中介者設計模式 http://www.linuxidc.com/Linux/2014-07/104319.htm
Java 設計模式之模板方法開發中應用 http://www.linuxidc.com/Linux/2014-07/104318.htm
設計模式之 Java 中的單例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm
跟JBPM學習設計模式 http://www.linuxidc.com/Linux/2014-06/102861.htm
--------------------------------------分割線 --------------------------------------
下面是剔除了部分代碼的Worker源碼:
private final class Worker
extends AbstractQueuedSynchronizer
implements Runnable
{
final Thread thread;
Runnable firstTask;
Worker(Runnable firstTask) {
setState(-1);
this.firstTask = firstTask;
this.thread = getThreadFactory().newThread(this);
}
public void run() {
runWorker(this);
}
}
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-11/108791p2.htm