使用Executors可以生成的线程池
newFixedThreadPool | 创建固定大小的线程池 |
newSingleThreadExecutor | 创建只有一个线程的线程池 |
newCachedThreadPool | 创建一个不限线程数上限的线程池,任何提交的任务都将立即执行 |
newScheduledThreadPool | 定时或者延迟执行的线程池 |
使用上面的线程池会出现两种OOM
- 无限制的创建线程
- 等待队列无线扩展
由于这两种OOM,所以一般使用线程池需要使用new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue)或者它的重载生成
其中我们需要指定
corePoolSize:核心线程数量
maixmumPoolSize:最大线程数量
keepAliveTime:线程闲置存活时间
unit:keepAliveTime单位
workQueue:等待队列
rejectedHandler:拒绝的回调函数
线程执行的流程
来源:https://www.cnblogs.com/ocean-onion/p/12518987.html