Executor框架(接口)负责在用户级别进行任务的调度和执行, 实现了任务调度和执行的分离.
Executor框架简介
Executor框架的两级调度模型
在上层, Java程序通过将应用分解为若干个任务(task),
然后使用用户级的调度器(Executor框架)将task映射为固定数量的Java线程.
在底层, Java线程与操作系统的线程是一一对应的关系, 由操作系统调度给可用的CPU. 底层的调度不受上层的影响.
Executor框架工作流程
主要包括3大组件:
- 异步任务:
Runnable或者Callable的实现类; - 异步任务的调度和执行(用户级别):
Executor接口的实现类ThreadPoolExecutor和ScheduledThreadPoolExecutor; - 异步计算的结果: 接口
Future和接口的实现类FutureTask.
组件间关系如下:
ThreadPoolExecutor详解
ThreadPoolExecutor是Executor框架的核心, 是线程池的实现类, 负责异步进行任务的调度和执行, 共有以下重要的配置参数:
corePoolSize: 核心线程池大小maximumPoolSize: 最大线程池大小;BlockingQueue: 用于保存任务的工作队列;
通过工具类Executors, 可以快速创建3种预定义参数的ThreadPoolExecutor, 以下将分别进行分析.
FixedThreadPool详解
被称为可重用固定线程数的线程池, 实际上就是ThreadPoolExecutor将corePoolSize和maximumPoolSize设置为相同大小,
同时使用了无界队列的情况.
SingleThreadExecutor详解
同一时间只有一个线程在执行任务, 为了确保任务的顺序执行.
实际上就是FixedThreadPool, corePoolSize和maximumPoolSize设置为1的特殊情况.
CachedThreadPool详解
corePoolSize设置为0, 在运行过程中会根据需要来创建线程执行任务, 使用没有容量的SynchronousQueue作为线程池的工作队列.
但是maximumPool是无界的, 所以适合于应对大量短任务的情况, 对于运行完任务的线程, 会有一个等待时间,
默认超过60秒没有新任务到来则自动销毁, 所以长时间保持空闲的CachedThreadPool不会使用任何资源.
未完待续
本文详细介绍了Java的Executor框架,包括其两级调度模型和工作流程。Executor框架通过将任务分解并映射到线程,实现了任务调度与执行的分离。重点讲解了ThreadPoolExecutor的实现,如FixedThreadPool、SingleThreadExecutor和CachedThreadPool,分析了它们的配置参数和适用场景。
3111

被折叠的 条评论
为什么被折叠?



