相关类Executor,Executors,AbstractExecutorService,ExecutorServiceExecutor:整个线程池执行者框架的顶层接口。定义了一个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.htmJava中介者设计模式 http://www.linuxidc.com/Linux/2014-07/104319.htmJava 设计模式之模板方法开发中应用 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