创建线程池
通过Executors创建线程池:
newCachedThreadPool
:可缓存线程池- 当线程池长度超过处理需要时,可以灵活的回收空闲线程,当需要增加时,可以灵活的添加新线程
- 线程数量最大值是
Integer.MAX_VALUE
,因此可以无限新建线程,容易造成内存溢出
newFixedThreadPool
:定长线程池- 可以自己设置线程最大并发数
- 线程数量是固定的,但阻塞队列是无界队列,如果请求积压,阻塞队列越来越长,容易导致OOM
newScheduledThreadPool
:固定长度的可以定时或周期执行的线程池- 所有任务由一个独立线程来调度
- 同一时间只能执行一个任务,任何延迟或异常都会影响后面任务的执行
newSingleThreadPool
:单线程的线程池- 能够保证所有任务按指定顺序执行
- 单线程,高并发下无力
new ThreadPoolExecutor()
:自定义线程池自定义线程池
new ThreadPoolExecutor(...)
构造参数如下:corePoolSize 核心线程数量
maximumPoolSize 最大线程数量
keepAliveTime 线程保持时间,N个时间单位
unit 时间单位(比如秒,分)
workQueue 阻塞队列
threadFactory 线程工厂
handler 线程池拒绝策略