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

2020-09-25 18:50:39 +08:00
 huntcool001

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

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

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

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

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

比如说 Executors.newFixedThreadPool(int queueCapcity)

3210 次点击
所在节点    Java
13 条回复
smallyu
2020-09-25 18:56:11 +08:00
?
codebigbang
2020-09-25 19:02:05 +08:00
因为开发者要保证方法适用于大部分人,有特殊需求的可以按照源码自己修改
EminemW
2020-09-25 22:45:56 +08:00
?怎么我的线程池可以传最大线程数
hodur
2020-09-26 09:36:10 +08:00
LinkedBlockingQueue 是无界的吗
anthow
2020-09-26 10:56:14 +08:00
方便啊
youxiachai
2020-09-26 11:02:32 +08:00
LinkedBlockingQueue 我白用了?
youxiachai
2020-09-26 11:07:54 +08:00
难怪我看起来这么怪....
Executors.newFixedThreadPool(int queueCapcity)
原来是 android 才支持?
youxiachai
2020-09-26 11:09:25 +08:00
看错了..忽略..应该有才对啊.... lz 用的 jdk 版本是多少,为啥会没有..
xiaofan2
2020-09-26 16:44:18 +08:00
lz 的无界的意思是如何不传参数默认的参数是 Integer.MAX_VALUE 吧
wysnylc
2020-09-27 10:13:50 +08:00
Executors.newWorkStealingPool(200)
记得经常更新下自己的 jdk 和技术
huntcool001
2020-09-27 14:09:50 +08:00
@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-09-27 19:11:21 +08:00
@wysnylc 这个 api 的入参不是队列容量吧
mightofcode
2020-09-29 17:50:53 +08:00
可能因为太懒了吧

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

https://www.v2ex.com/t/710515

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

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

© 2021 V2EX