概述
接口java.util.concurrent.ExecutorService
是Java中对线程池定义的一个接口
ThreadPoolExecutor实现ExecutorService接口,用于创建线程池
构造
//所有线程池最终都是通过这个方法来创建的
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
参数:
- corePoolSize: 核心线程数
- maximumPoolSize: 最大线程数
- keepAliveTime:最大时间
- unit:时间单位
- workQueue: 任务队列
- threadFactory:线程工厂
- handler: 处理阻塞时的程序
使用
java提供了java.util.concurrent.Executors
工厂类, 该类提供了一些静态方法,生成一些常用的线程池。
官方建议使用Executors工程类来创建线程池对象。
线程池分类
可缓存线程池
ExecutorService cachePool = Executors.newCachedThreadPool();
- 创建的都是非核心线程
- 最大线程数为Interge的最大值
- 空闲线程存活时间是1分钟
- 适用于生命周期短的任务,如果有大量耗时的任务,则不适该创建方式
单线程池
ExecutorService singlePool = Executors.newSingleThreadExecutor();
- 创建一个核心线程
- 保证任务按FIFO顺序一个个执行
固定线程数线程池
ExecutorService fixedPool = Executors.newFixedThreadPool(3);
- 创建固定数量的可复用的线程数
- 当线程数达到最大核心线程数,则加入队列等待有空闲线程时再执行
固定线程数,支持定时和周期性任务
ExecutorService scheduledPool = Executors.newScheduledThreadPool(5);
- 可用于替代handler.postDelay和Timer定时器等延时和周期性任务
使用线程池步骤
- 创建线程池对象。
- 创建Runnable、CallThread 接口实现类对象。
- 提交Runnable、CallThread 接口实现类对象。
- 关闭线程池(一般不用线程池时,或者程序退出时)