线程池优势
- 避免频繁创建与销毁
- 复用线程
- 方便线程并发管控
- 延时定时线程池
线程池的主要参数
- corePoolSize:核心线程数,优点1、2,低于核心数先创建线程,都算有空闲线程
- maximumPoolSize:最大并发数量
- keepAliveTime:线程保活时间,可用于核心与非核心
- workQueue :执行任务的等待队列
- threadFactory:用于创建线程
- handler:当maximumPoolSize和workQueue满了执行的策略
添加任务到线程池时候,首先要满足corePoolSize数量,都算有空闲线程也要创建线程。当corePoolSize已满时候,我们会把线程添加到workQueue队列中,在队列满了时,在maximumPoolSize是否还可以执行非核心线程然后添加,可能导致后来的线程先执行。
配置线程池
- CPU密集型任务:CPU核心数+1。CPU使用率高,过多线程造成切换过度
- IO密集型任务:0 ,最大线程数(参照okhttp)。CPU利用率不高,线程越多能充分利用CPU