请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

1回答

Jimin 2019-02-21 13:49:26

你好,先说一下他主要适用的场景:
1. 耗时较短的任务。
2. 任务处理速度 > 任务提交速度 ,这样才能保证不会不断创建新的进程,避免内存被占满。

取名为cached threadpool,原因在于线程池中的线程是被线程池缓存了的,也就是说,线程没有任务要执行时,便处于空闲状态,处于空闲状态的线程并不会被立即销毁(会被缓存住),只有当空闲时间超出一段时间(默认为60s)后,线程池才会销毁该线程(相当于清除过时的缓存)。新任务到达后,线程池首先会让被缓存住的线程(空闲状态)去执行任务,如果没有可用线程(无空闲线程),便会创建新的线程

corePoolSize为0,maximumPoolSize为无限大,意味着线程数量可以无限大,keepAliveTime为60S意味着线程空闲时间超过60S就会被杀死。只要有请求到来,就必须要找到一条工作线程处理他,如果当前没有空闲的线程,那么就会创建一条新的线程。

1 回复 有任何疑惑可以回复我~
  • 提问者 慕勒2563729 #1
    但是我还是不理解 corePoolSize 不为0 呢 我maxnumPoolSize也可以为设置成无限大啊
    回复 有任何疑惑可以回复我~ 2019-02-21 16:56:12
  • 提问者 慕勒2563729 #2
    而且corePoolSize作为核心线程数  他大小为0. 怎么就有线程缓存在池中
    回复 有任何疑惑可以回复我~ 2019-02-21 16:59:41
  • Jimin 回复 提问者 慕勒2563729 #3
    看你的问题感觉你没完全理解线程池啊,准确的来说是对threadPoolExecutor这个类的构造参数不理解,建议你再去看一下这里,重点关注corepoolsize,maxpoolsize,workqueue这几个参数对线程池调度的影响。newCachedExecutor其实就是创建threadPoolExecutor一个实例而已,只是传入的参数特殊一些,然后给起了个别名(其他几种也是,就是调整构造threadPoolExecutor实例等我参数)只需要根据构造参数去理解就可以了。
    回复 有任何疑惑可以回复我~ 2019-02-21 18:30:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信