JUC线程池之线程池架构
JUC线程池之线程池架构
在多线程编程中,任务都是一些抽象且离散的工作单元,而线程 是使任务异步执行的基本机制。随着应用的扩张,线程和任务管理也 变得非常复杂。为了简化这些复杂的线程管理模式,我们需要一个 “管理者”来统一管理线程及任务分配,这就是线程池。
线程池的架构图大致如下:
Executor
Executor是Java异步目标任务的“执行者”接口,其目标是执行 目标任务。“执行者”Executor提供了execute()接口来执行已提交的 Runnable执行目标实例。Executor作为执行者的角色,其目的是提供 一种将“任务提交者”与“任务执行者”分离开来的机制。
只包含一个函数式方法:
1 | void execute(Runnable command) |
ExecutorService
继承于Executor。他是Java异步目标任务的“执行者服务”接口,对外提供异步任务的接受服务。
提 供了“接收异步任务并转交给执行者”的方法,如:
1 | //向线程池提交单个异步任务 |
AbstractExecutorService
AbstractExecutorService是一个抽象类,它实现了 ExecutorService接口。AbstractExecutorService存在的目的是为 ExecutorService中的接口提供默认实现。
ThreadPoolExecutor
ThreadPoolExecutor是JUC线程池的核心实现类,继承 于AbstractExecutorService抽象类。线程的创建和终 止需要很大的开销,线程池中预先提供了指定数量的可重用线程,所 以使用线程池会节省系统资源,并且每个线程池都维护了一些基础的 数据统计,方便线程的管理和监控。
ScheduledExecutorService
ScheduledExecutorService是一个接口,它继承于 ExecutorService。它是一个可以完成“延时”和“周期性”任务的调 度线程池接口,其功能和Timer/TimerTask类似。
ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor继承于ThreadPoolExecutor,它提 供了ScheduledExecutorService线程池接口中“延时执行”和“周期 执行”等抽象调度方法的具体实现。
ScheduledThreadPoolExecutor类似于Timer,但是在高并发程序 中,ScheduledThreadPoolExecutor的性能要优于Timer。
Executors
Executors是一个静态工厂类,它通过静态工厂方法返回 ExecutorService、ScheduledExecutorService等线程池示例对象,这 些静态工厂方法可以理解为一些快捷的创建线程池的方法。