1.Executor的两级调度模型
在JVM的线程模型中,Java线程被一对一映射为本地操作系统线程。
在上层,Java多线程程序通常把应用分解成多个任务,然后使用Executor框架将这些任务映射为固定数量的线程。
在底层,操作系统内核将这些线程映射到硬件处理器上。
应用程序通过Executor框架控制上层的调度;而下层的调度由操作系统内核控制,下层的调度不受应用程序的控制。
2.Executor框架的结构
Executor架构有3大部分
- 任务。Runable接口和Callable接口
- 任务的执行。接口Executor,以及继承自Executor的ExecutorService接口。
- 异步计算的结果。接口Future和实现Future接口的FutureTask类
3.Executor框架成员
Executor框架的主要成员有 ThreadPoolExecutor、ScheduledThreadPoolExecutor
(A)ThreadPoolExecutor
ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadPool、CachedThreadPool
1.SingleThreadExecutor
线程数只有1的线程池。适用于需要保证顺序地执行各个任务;并且在任意时间点,不会有多个线程是活动的应用场景。
2.FixedThreadPool
线程数固定不变的线程池。适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场景,它适用于负载比较重的服务器。
3.CachedThreadPool
线程数无界的线程池,适用于执行很多的短期异步任务的小程序,或者是负载较轻的服务器。
(B)ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建2种类型的ScheduledThreadPoolExecutor。有ScheduledThreadPoolExecutor、SingleThreadScheduledExecutor。
1.ScheduledThreadPoolExecutor
线程数固定。适用于需要多个后台线程执行周期任务,同时为了满足资源管理的需求而需要限制后台线程的数量的应用场景。
2.SingleThreadScheduledExecutor
线程数只有1。适用于需要单个后台线程执行周期任务,同时需要保证顺序地执行各个任务的应用场景。