Skip to content

Latest commit

 

History

History
75 lines (61 loc) · 4.44 KB

ThreadPoolExecutor.adoc

File metadata and controls

75 lines (61 loc) · 4.44 KB

ThreadPoolExecutor 源码分析

大纲

  1. 基本使用

  2. 使用 Executors 创建线程池

  3. 自定义任务,并提交任务

  4. 获取返回结果

  5. 线程池的类图结构

  6. 创建执行线程

  7. 取出任务执行

  8. 如何实现 invokeAny(Collection<? extends Callable<T>> tasks)

  9. 如何实现 invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) ?

  10. 如何实现 invokeAll(Collection<? extends Callable<T>> tasks) ?

  11. 如何实现 invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)

  12. 如何判断线程超时?以及超时后如何杀掉线程?

  13. 如何终止任务?温柔终止?或者野蛮终止?

  14. 线程池在jDK5、6、7中有哪些升级变化?

  15. 拒绝策略

问题

  1. 任务添加后,如何执行?

  2. 一个任务执行完成后,如何在同一个线程执行下一个任务?

  3. corePoolSizemaximumPoolSize 小的情况下,如何判定一个线程是否超时?并且如何删除一个线程?

  4. 任务添加后,

  5. 如何返回任务执行的结果?

  6. 这个线程池还有哪些可以改进的地方?比如 Guava 中提供了哪些线程池?

需要注意的点

  1. 线程池如何初始化?

  2. 任务如何添加?

  3. 任务如何执行?

  4. 任务如何终止?

  5. 遇到异常如何处理?

  6. 线程池队列已满,如何拒绝?

  7. 任务执行过程中出现异常,如何处理?关闭该线程,重启一个吗?

  8. ??

  9. 任务如何存放?

  10. 任务存放后,如何取出来?

  11. 如何做到不断地一个一个执行下去?

  12. 为什么 Worker 继承 AbstractQueuedSynchronizer ?AQS起什么作用?是否需要先研究一下?

收获

  1. 可以继承 ThreadPoolExecutor,实现 beforeExecute()afterExecute() 等方法,来加入执行时的回调。类似的回调,还有 terminated()

  2. 添加任务时, execute() 方法的第二种情况,为什么还有再次检查?

参考资料

  1. [Java并发包源码学习之线程池(一)ThreadPoolExecutor源码分析 - Jindong](http://jindong.io/2015/03/30/java-concurrent-package-ThreadPoolExecutor/)

  2. [ThreadPoolExecutor简介与源码分析 - 邹胜群的个人页面 - 开源中国社区](http://my.oschina.net/zouqun/blog/407149)

  3. [Java并发源码分析 - ThreadPoolExecutor - SHOW ME THE CODE](http://onlychoice.github.io/blog/2013/09/13/java-concurrent-source-code-reading-2/)

  4. [Java线程池架构原理和源码解析(ThreadPoolExecutor) - xieyuooo的专栏 - 博客频道 - CSDN.NET](http://blog.csdn.net/xieyuooo/article/details/8718741)

  5. [Java多线程系列目录(共43篇) - 如果天空不死 - 博客园](http://www.cnblogs.com/skywang12345/p/java_threads_category.html)

  6. 搞清楚了 ctl 的含义,高三位是状态,低29位是线程数

  7. 主要属性的含义,主要方法的实现,任务添加后,三种不同的处理方式

  8. 线程池状态变换

  9. 线程池拒绝策略的实现

  10. 带返回值的任务的实现方式,CallableFuture

  11. [ThreadPoolExecutor的基本使用 | 三石·道](http://www.molotang.com/articles/514.html)

  12. [ThreadPoolExecutor的任务提交、任务处理、线程复用和维护相关源码分析 | 三石·道](http://www.molotang.com/articles/522.html)

  13. [ThreadPoolExecutor的生命周期相关源码分析 | 三石·道](http://www.molotang.com/articles/526.html)

  14. [ThreadPoolExecutor的任务饱和丢弃策略及源码实现 | 三石·道](http://www.molotang.com/articles/553.html)

  15. [聊聊并发(三)Java线程池的分析和使用 | 并发编程网 - ifeve.com](http://ifeve.com/java-threadpool/)

  16. [戏(细)说Executor框架线程池任务执行全过程(上)](http://www.infoq.com/cn/articles/executor-framework-thread-pool-task-execution-part-01?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text)

  17. [戏(细)说Executor框架线程池任务执行全过程(下)](http://www.infoq.com/cn/articles/executor-framework-thread-pool-task-execution-part-02?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text)

  18. [ThreadPoolExecutor 源码分析 - techq’s blog - 博客频道 - CSDN.NET](http://blog.csdn.net/techq/article/details/6818201)

  19. [JAVA线程池(ThreadPoolExecutor)源码分析_journeylin_新浪博客](http://blog.sina.com.cn/s/blog_753035050100wbtm.html)

  20. [ThreadPoolExecutor源码分析 - rilley - 博客园](http://www.cnblogs.com/rilley/archive/2012/02/07/2341767.html)