1、三大方法:
Executors.newSingleThreadExecutor(); 单线程
Executors.newFixedThreadPool(5); 固定线程个数
Executors.newCachedThreadPool(); 缓存池,可扩展
2、七大参数:(自定义创建线程池)
public ThreadPoolExecutor(int corePoolSize, //常驻核心线程数
int maximumPoolSize, //最大线程数
long keepAliveTime, //空闲线程存活时间(数字)
TimeUnit unit, //空闲线程存活时间(单位)
BlockingQueue<Runnable> workQueue, //任务队列
ThreadFactory threadFactory, //线程工厂
RejectedExecutionHandler handler) //拒绝策略
3、执行原理:
- corePoolSize 个线程处理任务
- 多余的任务在任务队列中等待
- 任务队列满了之后,线程池的线程数会扩容到 maximumPoolSize
- 线程池最大承载能力满了(任务队列+maximumPoolSize),拒绝任务
4、拒绝策略:
- AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统正常运行。
- DiscardPolicy:丢弃无法处理的任务,不会抛出异常。(如果允许任务丢失,这是最好的一种策略)
- DiscardOldestPolicy:抛弃队列中等待最久的任务,重新提交当前任务。
- CallerRunsPolicy(调用者运行):由调用线程(提交任务的线程)处理该任务。