线程池的核心参数有哪些?分别代表什么?

XIAO 2020-04-14 13:02:34 java常见问答 9443

一般呢,只要是提到了线程,那么总会让人联想到进程,后面呢就应该是这两者之间的一些对比什么的了,但是今天我们只聊线程,重点就是看看线程池的核心参数有哪些?弄明白它们分别代表什么?

我们都知道的是,通过线程池创建的线程执行完毕之后并不会立即销毁,而是会回到线程池继续重复利用,去执行其他任务。回过头来,我们还是继续了解线程池的核心参数吧。

corePoolSize(核心线程数)。核心线程会一直存在,即使没有任务执行;当线程数小于核心线程数的时候,即使有空闲线程,也会一直创建线程直到达到核心线程数;allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。

queueCapacity(任务队列容量)。也叫阻塞队列,当核心线程都在运行,此时再有任务进来,会进入任务队列,排队等待线程执行。

maxPoolSize(最大线程数),线程池里允许存在的最大线程数量;当任务队列已满,且线程数量大于等于核心线程数时,会创建新的线程执行任务;线程池里允许存在的最大线程数量。当任务队列已满,且线程数量大于等于核心线程数时,会创建新的线程执行任务。

keepAliveTime(线程空闲时间)。当线程空闲时间达到keepAliveTime时,线程会退出(关闭),直到线程数等于核心线程数;如果设置allowCoreThreadTimeout=true,则线程会退出直到线程数等于零。

allowCoreThreadTimeout(允许核心线程超时)

rejectedExecutionHandler(任务拒绝处理器),当线程数量达到最大线程数,且任务队列已满时,会拒绝任务;调用线程池shutdown()方法后,会等待执行完线程池的任务之后,再shutdown()。如果在调用了shutdown()方法和线程池真正shutdown()之间提交任务,会拒绝新任务。

了解过其核心参数之后,我们来看看线程池参数默认值吧。

corePoolSize = 1

queueCapacity = Integer.MAX_VALUE

maxPoolSize = Integer.MAX_VALUE

keepAliveTime = 60秒

allowCoreThreadTimeout = false

rejectedExecutionHandler = AbortPolicy()

最后我们一起来看看ThreadPoolExecutor(线程池)执行的顺序:

1.当线程数小于核心线程数时,会一直创建线程直到线程数等于核心线程数;

2.当线程数等于核心线程数时,新加入的任务会被放到任务队列等待执行;

3.当任务队列已满,又有新的任务时,会创建线程直到线程数量等于最大线程数;

4.当线程数等于最大线程数,且任务队列已满时,新加入任务会被拒绝。

那么以上就是有关线程池的核心参数的所有内容了,关注本站即可了解更多的java一些知识问答哦。