问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

十五、线程池(六)自动创建线程池的弊端

发布网友 发布时间:2023-08-03 20:44

我来回答

1个回答

热心网友 时间:2024-11-25 17:19

所谓的自动创建线程池就是直接调用 Executors 的各种方法来生成常见的线程池,例如 Executors.newCachedThreadPool()。但这样做是有一定风险的,接下来就来逐一分析自动创建线程池可能带来哪些问题。

首先来看第一种线程池 FixedThreadPool, 它是线程数量固定的线程池,如源码所示,newFixedThreadPool 内部实际还是调用了 ThreadPoolExecutor 构造函数。

通过往构造函数中传参,创建了一个核心线程数和最大线程数相等的线程池,它们的数量也就是传入的参数,这里的重点是使用的队列是容量没有上限的 LinkedBlockingQueue,如果对任务的处理速度比较慢,那么随着请求的增多,队列中堆积的任务也会越来越多,最终大量堆积的任务会占用大量内存,并发生 OOM ,也就是OutOfMemoryError,这几乎会影响到整个程序,会造成很严重的后果。

第二种线程池是 SingleThreadExecutor,来分析下创建它的源码。

可以看出,newSingleThreadExecutor 和 newFixedThreadPool 的原理是一样的,只不过把核心线程数和最大线程数都直接设置成了 1,但是任务队列仍是无界的 LinkedBlockingQueue,所以也会导致同样的问题,也就是当任务堆积时,可能会占用大量的内存并导致 OOM。

第三种线程池是 CachedThreadPool,创建它的源码下所示。

这里的 CachedThreadPool 和前面两种线程池不一样的地方在于任务队列使用的是 SynchronousQueue,SynchronousQueue 本身并不存储任务,而是对任务直接进行转发,这本身是没有问题的,但会发现构造函数的第二个参数被设置成了 Integer.MAX_VALUE,这个参数的含义是最大线程数,所以由于 CachedThreadPool 并不*线程的数量,当任务数量特别多的时候,就可能会导致创建非常多的线程,最终超过了操作系统的上限而无法创建新线程,或者导致内存不足。

第四种线程池 ScheledThreadPool 和第五种线程池 SingleThreadScheledExecutor 的原理是一样的,创建 ScheledThreadPool 的源码如下所示。

而这里的 ScheledThreadPoolExecutor 是 ThreadPoolExecutor 的子类,调用的它的构造方法如下所示。

通过源码可以看出,它采用的任务队列是 DelayedWorkQueue,这是一个延迟队列,同时也是一个无界队列,所以和 LinkedBlockingQueue 一样,如果队列中存放过的任务,就可能导致 OOM。

这几种自动创建的线程池都存在风险,相比较而言,自己手动创建会更好,因为我们可以更加明确线程池的运行规则,不仅可以选择适合自己的线程数量,更可以在必要的时候拒绝新任务的提交,避免资源耗尽的风险。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 香港女演员文颂娴 曾经试验过一部《凤凰传说》吗? 股东会决议需要代表签字吗 股东会决议要盖公章吗 叙述脚底停球的动作要领 苹果手机钢化膜哪种不易碎 滚筒洗衣机墙排水高度 rick怎么读人名 适合做状态的文案 好状态个性签名文案 枫海文学网为什么能搜到但打不开网页? 梦溪文学哪儿去了? 为毛梦溪文学网打不开?》 为什么我梦溪文学网登陆不上,还找不到注册的地方?? 从宁波到西安旅游指南安西安旅游指南安到宁波去自驾游 从西安到宁波要经过几个省 宁波到西安高速都经过哪些城市 辽宁机电职业技术学院怎么样啊? 一个三角形中最小的角是46度按角分类这个角是什么三角形 ...个三角形里,如果最小的角是46度,那么这个三角形一定是什么三角形 一个三角形的内角是46度,这个三角形是? 衡阳奥数培训班怎么收费的 重庆第二师范学院好还是长江师范学院好? 奥数35一个小时贵吗 2022年原力奥数课多少一节 奥数100元一节课贵吗 ...张嘴就是骂人的。再遇到这样人,我该怎么办? 雀是可汐txt全集下载 ...整天都想些烦恼事情张嘴闭嘴都对别人大吼吵架骂人!这不顺眼那不顺眼... 卿妤一献电子书txt全集下载 vivo手机突然黑屏发烫开不了机? 老公不在家,我和闺蜜睡主卧影响风水吗 夫妻结婚的婚床可以和闺蜜一起睡吗? 苹果怎么恢复已经删除的好友 北京交通大学录取分数线 北京交通大学2023年投档线 黑龙江省牡丹江市有哪两个自贸区口岸 牡丹江的口岸城市有哪几个? 海马骑士试驾怎么样? 贵阳职业院校有哪些 尛蠡二字读作什么?代表什么意思?