Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Java线程池框架源码分析

相关类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