RT, 说的就是 Executors.newFixedThreadPool()的那几个实现.
要么就是队列是无界的(newFixedThreadPool,newSingleThreadExecutor)
要么就是线程池数量没有上限(newCachedThreadPool)
结果就是生产里大家基本都不会用 Executors 里的这几个实现,不然挺容易内存爆掉. 估计不少人都遇到过这个问题.所以阿里的规范里要求都是自己用 ThreadPoolExecutor 实现一个,放一个有界队列进去.
我的问题就是,为啥 JDK 的维护者不多加个构造函数,允许指定队列上限的?
比如说 Executors.newFixedThreadPool(int queueCapcity)
1
smallyu 2020-09-25 18:56:11 +08:00
?
|
2
codebigbang 2020-09-25 19:02:05 +08:00 via Android
因为开发者要保证方法适用于大部分人,有特殊需求的可以按照源码自己修改
|
3
EminemW 2020-09-25 22:45:56 +08:00
?怎么我的线程池可以传最大线程数
|
4
hodur 2020-09-26 09:36:10 +08:00
LinkedBlockingQueue 是无界的吗
|
5
anthow 2020-09-26 10:56:14 +08:00
方便啊
|
6
youxiachai 2020-09-26 11:02:32 +08:00
LinkedBlockingQueue 我白用了?
|
7
youxiachai 2020-09-26 11:07:54 +08:00
难怪我看起来这么怪....
Executors.newFixedThreadPool(int queueCapcity) 原来是 android 才支持? |
8
youxiachai 2020-09-26 11:09:25 +08:00
看错了..忽略..应该有才对啊.... lz 用的 jdk 版本是多少,为啥会没有..
|
9
xiaofan2 2020-09-26 16:44:18 +08:00
lz 的无界的意思是如何不传参数默认的参数是 Integer.MAX_VALUE 吧
|
10
wysnylc 2020-09-27 10:13:50 +08:00
Executors.newWorkStealingPool(200)
记得经常更新下自己的 jdk 和技术 |
11
huntcool001 OP @youxiachai
https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/concurrent/Executors.html JDK15 的文档, 没有 Executors.newFixedThreadPool(int queueCapcity) |
13
mightofcode 2020-09-29 17:50:53 +08:00
可能因为太懒了吧
|