newCachedThreadPool 的 corepoolsize为何要的值为何要设置成o

来源:8-3 线程池-3

慕勒2563729

2019-02-21

写回答

1回答

Jimin

2019-02-21

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

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

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

1
5
Jimin
回复
慕勒2563729
这个拿corePoolsize这个参数的基本理解去对一下就可以了。1)如果运行的线程少于 corePoolSize,则创建新线程来处理任务,即使线程池中的其他线程是空闲的;2)如果线程池中的线程数量大于等于 corePoolSize 且小于 maximumPoolSize,则只有当workQueue满时才创建新的线程去处理任务。3)如果运行的线程数量大于等于maximumPoolSize,这时如果workQueue已经满了,则通过handler所指定的策略来处理任务。当corePoolSize等于0时,其实就是第一种情况永远不会出现,由于maxPoolSize为最大值,因此第三种情况也无法出现,就只有第二种情况了而已。
2019-02-21
共5条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程