JDK 里面的自带的线程池为啥都不改一下实现?

2020 年 9 月 25 日
 huntcool001

RT, 说的就是 Executors.newFixedThreadPool()的那几个实现.

要么就是队列是无界的(newFixedThreadPool,newSingleThreadExecutor)

要么就是线程池数量没有上限(newCachedThreadPool)

结果就是生产里大家基本都不会用 Executors 里的这几个实现,不然挺容易内存爆掉. 估计不少人都遇到过这个问题.所以阿里的规范里要求都是自己用 ThreadPoolExecutor 实现一个,放一个有界队列进去.

我的问题就是,为啥 JDK 的维护者不多加个构造函数,允许指定队列上限的?

比如说 Executors.newFixedThreadPool(int queueCapcity)

3979 次点击
所在节点    Java
13 条回复
smallyu
2020 年 9 月 25 日
?
codebigbang
2020 年 9 月 25 日
因为开发者要保证方法适用于大部分人,有特殊需求的可以按照源码自己修改
EminemW
2020 年 9 月 25 日
?怎么我的线程池可以传最大线程数
hodur
2020 年 9 月 26 日
LinkedBlockingQueue 是无界的吗
anthow
2020 年 9 月 26 日
方便啊
youxiachai
2020 年 9 月 26 日
LinkedBlockingQueue 我白用了?
youxiachai
2020 年 9 月 26 日
难怪我看起来这么怪....
Executors.newFixedThreadPool(int queueCapcity)
原来是 android 才支持?
youxiachai
2020 年 9 月 26 日
看错了..忽略..应该有才对啊.... lz 用的 jdk 版本是多少,为啥会没有..
xiaofan2
2020 年 9 月 26 日
lz 的无界的意思是如何不传参数默认的参数是 Integer.MAX_VALUE 吧
wysnylc
2020 年 9 月 27 日
Executors.newWorkStealingPool(200)
记得经常更新下自己的 jdk 和技术
huntcool001
2020 年 9 月 27 日
@youxiachai

https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/concurrent/Executors.html

JDK15 的文档, 没有 Executors.newFixedThreadPool(int queueCapcity)
zhady009
2020 年 9 月 27 日
@wysnylc 这个 api 的入参不是队列容量吧
mightofcode
2020 年 9 月 29 日
可能因为太懒了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/710515

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX