线程池
线程池的优点
- 线程池中的线程可以重用,减少线程创建、销毁带来的系统开销;
- 控制线程池的最大并发量,避免相互抢占系统资源而导致阻塞;
- 对线程进行简单管理,提供定时执行,以及指定间隔循环执行;
ThreadPoolExecutor构造方法
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory)
参数说明:
- 
corePoolSize 线程池的核心数 
- 
maximumPoolSize 线程池能容纳的最大线程数 
- 
keepAliveTime 非核心线程闲置时间的超时时长,超过这个时长,非核心线程就会被回收。ThreadPoolExecutor的allowCoreThreadTimeOut属性为true,keepAliveTime同样会作用于核心线程。 
- 
unit 超时时长的单位,常用的有TimeUnit.MILISECONDS\TimeUnit.SECONDS\TimeUnit.MINUTES等 
- 
workQueue 线程池中的任务队列,通过线程池的execute方法提交Runnerable对象会存储在这个参数中 
- 
threadFactory 线程工厂 
ThreadPoolExecutor执行任务的规则
设:nThreadNow: 为当前线程数量; nCore: 核心线程数量; nPoolMax: 线程池最大值
- nThreadNow < nCore, 启动一个核心线程来执行任务;
- nThreadNow >= nCore && 工作队列未满, 将任务插入到工作队列;
- 工作队列已满 && nThreadNow < nPoolMax, 立即启动一个非核心线程来执行任务;
- nThreadNow >= nPoolMax, 拒绝执行此任务
线程池的分裂
Android中有四种常见的线程池:
- 
FixedThreadPool - 线程数量固定
- 当线程处于空闲状态时,不会被回收
- 当所有的线程处于活动状态时,新任务都会处于等待状态,直到有线程空闲出来
- 只有核心线程
- 没有超时机制
- 任务队列没有大小限制
 
- 
CachedThreadPool 适用于执行大量耗时较少的任务 - 线程数量不固定
- 只有非核心线程
- 线程池中的线程都处于活动状态,新建线程来处理新任务;否则利用空闲线程处理新任务
- 空闲线程都有超时机制
 
- 
ScheduledThreadPool 适用于执行定时任务、具有固定周期的重复任务 - 核心线程数量固定
- 非核心线程数没有限制
- 非核心线程闲置时会被立即回收
 
- 
SingleThreadPool - 内部只有一个核心线程
- 确保所有任务都在同一个线程中按顺序执行
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号