小伙伴们对于Thread、Runnable、Handler、AyscTask应该十分熟悉,并且借助它们完成了一个个炫酷的功能,那么关于线程池的了解呢?这边文章就和小伙伴一起来看看关于线程池的这些事
1.什么是线程池
线程池是1块缓存了一定线程数量的区域,用来复用线程和管理线程,如统一分配、调优、监控和控制最大并发数等
优点:
- 降低因线程创建销毁所带来的性能开销 重用缓存线程池的线程
- 提高线程响应速度和执行效率 通过重用线程 不需要创建线程即可马上执行 优化线程的执行顺序 避免大量线程因互相抢占系统资源而导致的阻塞现象
2.工作原理
线程中有6个核心参数
- corePoolSize : 核心线程数 ,默认情况下,核心线程会一直存活(包括空闲状态)
- maximumPoolSize:线程池所能容纳的最大线程数,当活动线程数达到该数值后,后续新的任务将会阻塞
- keepAliveTime:非核心线程 限制超时时长,超过该时长,非核心线程就会被回收
- unit:指定 keepAliveTime参数的时间单位,毫秒、秒等
- workQueue:任务队列,通过线程池的execute方法提交的Runnable对象,将存储在该参数中
- threadFactory:线程工厂(接口)用来为线程池创建新的线程 Thread newThread(Runnable r)
ThreadPoolExecutor是线程池的真正实现类
// 创建线程池对象如下
// 通过 构造方法 配置核心参数
Executor executor = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE,
TimeUnit.SECONDS,
sPoolWorkQueue,
sThreadFactory
);
// 构造函数源码分析
public ThreadPoolExecutor (int corePoolSize,
int maxi