Java中线程即是工作单元,也是执行单元。从jdk5开始,把工作单元与执行单元机制分离开来。工作单元包括:Runnable和Callable,执行单元由Executor框架提供。
1. Executor框架组成部分
(1) 任务:Runnable接口和Callable接口
(2) 任务的执行:核心接口(Executor),以及继承自Executor的ExecutorService接口。ExecutorService接口两个关键实现类:ThreadPoolExcutor和ScheduledThreadExcutor。
(3) 异步计算结果:接口Future和接口Future的实现类(FutureTask类)
Executor框架基本接口和类介绍:
Executor接口:最基本接口,将任务的提交与任务的执行分离开来。
ThreadPoolExcutor:线程池的核心实现类,用来执行被提交的任务。
ScheduledThreadExcutor:实现类,可以在给定的延迟后运行命令,或者定期执行命令。(比Timer更灵活,功能更强大)。与Timer类似,但是ScheduledThreadExcutor功能更加强大和灵活。Timer对应的是单个后台线程,ScheduledThreadExcutor可以在构造函数中指定多个对应的后台线程数。
Future接口:异步计算结果。
FutureTask类(Future的实现类):异步计算结果。
(4) Runnable接口和Callable接口的实现类:都可以被ThreadPoolExcutor和ScheduledThreadExcutor执行。
2. Executor框架成员
Executor框架主要成员:ThreadPoolExecutor、ScheduledThreadPoolExecutor、Future接口、Runnable接口、Callable接口和Exectors。
(1) ThreadPoolExecutor
ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3中类型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadExecutor和CachedThreadExecutor。
SingleThreadExecutor:使用需要保证顺序地执行各个任务,并且在任何时间点,不会有多个线程是活动的应用场景。
public static ExecutorService newSingleThreadExecutor();
public static ExecutorService newSingleThreadExecutor(ThreadFactorythreadFactory);
FixedThreadExecutor:使用满足资源需求,而需要限制当前线程数量的应用场景,比较适合负载比较重的服务器。
public static ExecutorService FixedThreadExecutor (intnThreads);
public static ExecutorService FixedThreadExecutor (intnThreads ,ThreadFactory threadFactory);
CachedThreadExecutor:大小无界的线程池,适用于执行很多的短期异步任务的小程序或者是负载较轻的服务器。
(2) ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建2中类型的ScheduledThreadPoolExecutor:ScheduledThreadPoolExecutor、和SingleThreadScheduledlExecutor。
ScheduledThreadPoolExecutor:适合于需要多个后台线程执行周期任务,同时满足资源管理的需求而需要限制后台线程的数量的应用场景。
SingleThreadScheduledlExecutor:适用于需要单个后台任务执行周期任务,同时需要保证顺序的执行各个任务的应用场景。
(3) Future接口
(4) Runnable接口和Callable接口
这两个接口的区别就是Runnable接口不会返回结果而Callable接口可以返回结果。