Welcome 微信登录

首页 / 软件开发 / JAVA / 深入浅出多线程(6)分析并行包线程池的设计与实现

深入浅出多线程(6)分析并行包线程池的设计与实现2011-09-07 BlogJava vincent接上篇,在上篇中介绍了线程池的设计需求以及使用,在这里我们分析 Concurrent包中线程池的实现类ThreadPoolExecutor的设计,是不是感觉没意义 ,人家都实现了还分析啥?当然是提高我们自身的设计能力了。对于设计能力的 提高,我认为一方面我们要在具体实践中,能够学习前人

总结的设计思想(比如设计模式之类的),根据具体上下文,能够融会贯通 的使用他们。另一方面分析优秀的框架设计与实现也是很好的方式,当然JDK设 计是最好的学习资料。闲话多了,切入主题,设计要点:

纵观在JDK1.5以前我们自己实现的线程池,还是Concurrent提供的线程池, 在线程池中首先我们要两个容器维护线程池中的线程与提交给线程池中的Task。

线程池与Task如何关联,什么样的Task才可以提交的该线程池中执行呢。所 以我们要定义一个接口,分离线程池与具体

Task的耦合关系,ThreadPoolExecutor可以接受实现Runnable接口或者 Callable接口(其实最后也是组装为Runnable接口)的具体Task。

线程池中的线程从Task队列中去Task执行。

以上就是线程池设计的要点。

在ThreadPoolExecutor中,有一个内部类Worker,实现了Runnable,也就是 线程池中的线程,不言而喻,它的Run方法就是从Task队列

取Task,调用Task的run方法(Task 是实现了Runnable接口的),执行Task ,依次类推,直到没有队列里面Task。看下图