
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 可能因为太懒了吧 |