基于 API 29
什么是线程池?
代表线程池的是一个接口Executor,它只有一个execute方法,接口Executor真正实现类是ThreadPoolExecutor。
引用线程池好处:
1)提升性能。创建和消耗对象费时费CPU资源。
2)防止内存过度消耗。控制活动线程的数量,防止并发线程过多。
四种线程池:

FixedThreadPool:固定大小线程池,只有核心线程,任务队列无限大,没有超时机制,不会被回收。
SingleThreadPool:单任务线程池,只有一个核心线程,任务队列无限大,不会被回收。
CacheThreadPool:缓存线程池,没有核心线程,有足够多的非核心线程,当执行新的任务时,没有空闲线程,则会创先新的线程执行,若有空闲线程,则会使用空闲线程执行任务,非核心线程空闲时长超过60s,则会被回收。
ScheduledThreadPool:定时线程池,核心线程数量固定,非核心线程足够多,非核心空线程空闲时常10s会被回收。
四种线程池并不是类,是对线程池的描述,实质都是ThreadPoolExecutor,只是创建ThreadPoolExecutor对象时传入的参数值不同。
构造函数:

corePoolSize:核心线程数量;
maximumPoolSize:线程池中允许的线程最大数量;
keepAliveTime: 闲置时常,默认情况下指非核心线程的闲置时常,超过这个时间将会被回收,设置allowCoreThreadTimeOut为true,会作用于核心线程。
unit:枚举类,时间单位;
workQueue:任务队列,用于存放被执行的Runnable对象。
threadFactory:线程工厂,ThreadFactory是一个接口,只有一个newThread(Runnable )方法,为线程池创建新的线程。
handler:RejectedExecutionHandler是一个接口,只有一个rejectedExecution(Runnable r, ThreadPoolExecutor executor)方法,在执行任务时,若线程池中超过最大线程数量或者线程池关闭,会调用rejectedExecution方法,抛出RejectedExecutionException异常。
ThreadPoolExecutor有四个内部类:CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy都是RejectedExecutionHandler的子类。