JUC源码分析-线程池篇:线程池框架

大多数并发应用程序都是围绕“任务执行”来构造的:任务通常是一些抽象且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构。而“任务执行”离不开线程,但线程的创建和管理是非常复杂的,为了简化这些复杂的线程管理模式,我们需要一个线程管理者来统一管理线程及任务分配,这就是线程池。 从本章开始,我们将对并发编程中另一个非常重要的概念-线程池进行详细的讲解。

    任务是一组逻辑工作单元,而线程则是使任务异步执行的机制。而使用线程来管理任务执行,务必要考虑“为每个任务分配一个线程”的资源管理的复杂性,而线程池则简化了线程的管理工作,从JDK1.5开始,Java 类库提供了这种灵活的线程池框架-Executor。它为灵活且强大的异步任务执行执行提供了基础,该框架能支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程与执行过程解耦开来。并且 Executor 的实现还提供了对生命周期的支持,以及统计信息收集、应用程序管理机制和性能监视等机制。

框架结构

《JUC源码分析-线程池篇:线程池框架》

线程池框架结构

  • Executor:线程池的最上层接口,提供了任务提交的基础方法。
  • ExecutorService:提供了线程池管理的上层接口,如池销毁、任务提交、异步任务提交。
  • ScheduledExecutorService:提供任务定时或周期执行方法的 ExecutorService。
  • AbstractExecutorService:为 ExecutorService 的任务提交方法提供了默认实现。
  • ThreadPoolExecutor:大名鼎鼎线程池类,提供线程和任务的调度策略。
  • ScheduledThreadPoolExecutor:属于线程池的一种,它可以允许任务延迟或周期执行,类似java的Timer。
  • ForkJoinPool:JDK1.7加入的成员,也是线程池的一种。只允许执行 ForkJoinTask 任务,它是为那些能够被递归地拆解成子任务的工作类型量身设计的。其目的在于能够使用所有可用的运算资源来提升应用性能。
  • Executors:创建各种线程池的工具类。

简单来说,线程池分为三种:基础线程池ThreadPoolExecutor延时任务线程池 ScheduledThreadPoolExecutor分治线程池ForkJoinPool。每种线程池中都有其支持的任务类型,后面我们在源码分析中,会穿插讲解各个线程池中遇到的各种任务类型。

作者:泰迪的bagwell
链接:https://www.jianshu.com/p/7a735d351391
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    原文作者:JUC
    原文地址: https://blog.csdn.net/yongchao940/article/details/83026918
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞