一般呢,只要是提到了线程,那么总会让人联想到进程,后面呢就应该是这两者之间的一些对比什么的了,但是今天我们只聊线程,重点就是看看线程池的核心参数有哪些?弄明白它们分别代表什么?
我们都知道的是,通过线程池创建的线程执行完毕之后并不会立即销毁,而是会回到线程池继续重复利用,去执行其他任务。回过头来,我们还是继续了解线程池的核心参数吧。
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一些知识问答哦。