Android中的线程池
线程池的优点:
- 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。
- 能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。
- 能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。
## ThreadPoolExecutor ##
ThreadPoolExecutor是线程池的真在实现,它的构造方法提供了一系列参数来配置线程池。public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数
int maximumPoolSize,//线程池所能容纳的最大线程数
long keepAliveTime,//非核心线程闲置时的超长时长,超过这个时间,非核心线程就会被回收
TimeUnit unit,//用于指定keepAliveTime参数的时间单位
BlockingQueue workQueue,//线程池中的任务队列
ThreadFactory threadFactory);//线程工厂,为线程池提供创建新线程的功能
ThreadPoolExecutor执行任务时大致遵循如下的规则:
1,如果线程池中的线程数量未达到核心线程的数量,那么会直接启动一个核心线程来执行任务。
2,如果线程池中的线程数量已经达到或者超过核心线程的数量,那么任务会被插入到任务队列中排队等待执行。
3,如果在步骤2中无法将任务插入到任务队列中,这往往是由于任务队列已满,这个时候如果线程数量未达到线程池规定的最大值,那么会立刻启动一个非核心线程来执行任务
4,如果步骤3中线程数量已经达到线程池规定的最大值,那么就拒绝执行此任务,ThreadPoolExecutor会调用RejectedExecutionHandler的rejectedExecution方法来通知调用者。
## 线程池的分类 ##
Android中常见的有四类线程池,它们都是直接或者间接地通过配置ThreadPoolExecutor来实现自己的功能特性。分别是:FixedThreadPool、CacheedThreadPool、ScheduleThreadPool以及SingleThreadExecutor。