设为首页 加入收藏

TOP

Java线程池框架源码分析
2014-11-23 18:58:58 来源: 作者: 【 】 浏览:23
Tags:Java 线程 框架 源码 分析

相关类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 ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}


public Future submit(Runnable task, T result) {
if (task == null) throw new NullPointerException();
RunnableFuture ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}



public Future submit(Callable task) {
if (task == null) throw new NullPointerException();
RunnableFuture 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 workers = new HashSet();


workers可以看做是ThreadPoolExecutor中用于运行任务的线程池。


worker是一个封装了一个Thread对象并实现了Runnable接口的类。封装Thread很容易理解,因为它要利用Thread去运行execute方法提交过来的runnable任务,但是为什么会继承runnable接口呢?


--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------


下面是剔除了部分代码的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);
}



}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Google校招在线测试题---2048游戏 下一篇SynchronousQueue学习笔记

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: