java 线程池
1、目的
线程复用,避免频繁的创建、销毁线程耗费资源
2、java 线程池
(接口)Excutor -> (接口)ExcutorService - > (抽象类)AbstractExcutorService -> (类)ThreadPoolExcutor
3、关键参数
核心线程数、最大线程数、空闲线程存活时间、任务缓存队列的选择、淘汰策略的选择
4、任务队列类型
SynchronousQueue 阻塞队列,没有容量,不可缓存任务,可以理解为数据交换通道;
ArrayBlockingQueue 有界队列,缓存一定数目的任务
LinkedBlockingQueue 无界队列,最多存放Interger.Max个任务
5、淘汰策略
- 抛异常
- 直接丢弃,不抛异常
- 丢弃最早的task,再次尝试excute
- 采用回调线程本身去执行task
6、Excutors实现了的几种线程池
- 固定大小的 - LinkedBlockingQueue
- cache类型的,线程可无限扩大 SynchronousQueue
- 单线程(可保证执行顺序)- 对应LinkedBlockingQueue队列
- 单线程调度(延迟执行、周期调度)- DelayedWorkQueue
- 多线程调度线程池(延迟执行、周期调度) - DelayedWorkQueue
- newWorkStealingPool(最终返回ForkJoinPool对象)