线程池设计最大线程数这个参数有什么好处?

线程池的最大线程数参数设计有什么特别的意义吗?如果核心线程满了,就放入等待队列,等待队列满了,为什么还会看最大线程数呢?如果核心线程小于最大线程,等待队列又满了的情况下,不是会有一部分后加入的线程先执行了?
设计成核心线程满放入等待队列,等待队列满就执行拒绝策略不可以吗?
想问下加入最大线程数有哪些优点?

我们的目的是最大的利用资源而又不浪费。所以有了核心线程数和最大线程数。当任务多的时候,新创建线程来执行任务。任务少的时候,核心线程以外的线程就被销毁了。

拒绝了,那你数据不就丢失了吗,你还要另外建立一套生产者消费者模型来缓存数据,那你还用线程池干什么呢
线程池就是为了不再需要自己建立生产者消费者模型啊
你只需要把任务不停的丢进队列里去,系统自动的开线程,不香吗
核心线程的意思其实就是最小线程数,就是你没有任务的时候也维持这么多个线程等着,这样可以快速的响应你随时丢进来的数据,而省去了开线程的时间
没人说过核心线程就要把cpu占满
最大线程就是当你核心线程处理不过来的时候,动态的多开一些线程,让cpu更充分的利用起来
当然副作用是,你的任务效率提高了,系统里其他程序可能要变卡顿了

  1. 线程池不会一直在运行状态。假设配置核心线程数 corePoolSize 为2 ,最大线程数 maximumPoolSize 为5,我们可以通过 corePoolSize 核心线程数后创建的线程的存活时间例如为60s,在60s内没有线程任务执行,则会停止该线程。

  2. 线程池底层 ThreadPoolExecutor 底层实现原理
    当线程数小于核心线程数时,创建线程。
    当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。
    当线程数大于等于核心线程数,且任务队列已满,有以下两种情况。

          如果线程数小于最大线程数,创建线程。
          如果线程数等于最大线程数,抛出异常,拒绝任务。