Executors.newFixedThreadPool(int nThreads)存在的缺陷

一般来讲是不推荐直接使用JAVA提供的Executors类来初始化线程池,如果有需要可以自行通过ThreadPoolExecutor来封装进行初始化。

可以用newFixedThreadPool(int nThreads) 来简单分析下。

看一下源代码不难发现,问题的原因在于此方法返回的ThreadPoolExecutor使用的阻塞队列是LinkedBlockingQueue(此处涉及到线程池的一些核心构造参数,没有相关知识的小伙伴可以自行查阅一下)的空参构造,其代码如下

 问题就在此处,LinkedBlockingQueue的默认边界过大,很有可能因为任务过多导致内存溢出问题。

 

posted @ 2023-12-13 11:32  NoHairException  阅读(23)  评论(0编辑  收藏  举报