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