标签:let 最大 java线程池 空闲 易用 int 直接 OLE 异常
一.Java提供Executors工具类来创建四种类型的线程池:
1.单线程的线程池:Executors.newSingleThreadExecutor()
2.定长线程池:Executors.newFixedThreadPool(int nThreads)
3.可缓存的线程池:Executors.newCachedThreadPool(int nThreads)
4.定期执行的线程池:Executors.newScheduledThreadPool(int corePoolSize)
二.ThreadPoolExecutors详解
通过源码可以发现,Exectuors内部其实是通过new ThreadPoolExecutor来创建线程池,而阿里开发手册中规定禁用Execotrs创建线程池,推荐用ThreadPoolExecutors来创建;
那么阿里为什么禁止使用Executors来创建线程池呢,首先来查看ThreadPoolExecutors构造函数的几个参数:
再来看一下线程池的执行过程:
通过参数可以看出来,Executors创建的线程池最大线程数量以及线程队列都是Integer.MAX_VALUE,几乎相当于无限制创建,这样非常容易导致内存溢出;所以创建线程池最好通过自定义的
ThreadPoolExecutors来创建,这样更容易用过具体环境来优化线程池线程数量
三.ThreadPoolExecutors拒绝策略
标签:let 最大 java线程池 空闲 易用 int 直接 OLE 异常
原文地址:https://www.cnblogs.com/ljhblogs/p/12868939.html