Java线程池的问题

你的理解是正确的。

核心线程数量(corePoolSize):核心线程将始终运行,即使没有任务要处理。
当线程数小于主线程数时,即使现有线程空闲,线程池也会优先创建新线程来处理任务,而不是直接交给现有线程处理。

最大线程数(maxPoolSize):当线程数大于等于主线程且任务队列已满时,线程池会创建新线程,直到线程数达到maxPoolSize。

如果线程数等于maxPoolSize并且任务队列已满,则说明超出了线程池的容量,线程池将拒绝处理该任务并抛出异常。

线程池根据以下行为执行任务:

当线程数小于主线程数时,创建线程。

当线程数大于等于主线程数且任务队列未满时,将任务放入任务队列中。

当线程数大于等于主线程数且任务队列已满时,1、如果线程数小于最大线程数,则创建线程;2、如果线程数等于最大线程数,则抛出异常,任务被拒绝。

线程池七大核心参数

七个主要线程池参数如下:1.corePoolSize主线程数:池中保留的最大线程数。
2.maximumPoolSize最大线程数:最大核心线程数+紧急线程数。
3.keepAliveTime生存时间:紧急线程的生存时间如果在生存时间内没有新的任务,则该线程的资源将被释放。
4.时间单位——紧急线程生存时间单位,如秒、毫秒等。
5.workQueue:当没有空闲的主线程时,新的任务将被添加到这个队列中。
当队列满时,将创建一个紧急线程来执行任务。
6.threadFactory:可以自定义创建线程对象,比如设置线程名称、是否为守护线程等。
7.Manager拒绝策略:当所有线程都忙并且workQueue已满时,将触发拒绝策略