为什么要使用线程池?线程池参数

(一) 为什么使用线程池

  1 降低资源消耗,提高线程利用率,降低创建和销毁线程的消耗

  2 提高响应速度,任务来了,直接有线程可用可执行,而不是创建线程,在执行


(二) 线程池参数

  1 corePoolSize : 

     代表的是核心线程数,也就是正常情况下创建工作的线程数,表示最大允许被创建的线程数,

     比如当前任务较多,将核心线程数都用完了,还无法满足需求时,此时就会创建新的线程,

     但是线程池内线程总数不会超过最大线程数

  2 maxinumPoolSize:

      代表的是最大线程数,它与核心线程数相对应,表示最大允许被创建的线程数,比如当前任务较多

      将核心线程数都用完了,并且队列也满了,还无法满足需求时,此时就会创建新的线程,但是线程池内线程总数不会超过最大线程数。

  3 keepAlive , unit:

       表示超出核心线程数之外的线程的空闲存活时间,也就是核心线程不会消除,但是超出核心线程数的部分线程

       如果空闲一定时间则会被消除,我们可以通过setKeepAliveTime 来设置空闲时间。

  4 workQueue:

       用来存放待执行的任务,假设我们现在核心线程都已被使用,还有任务进来则全部放入队列,直到整个队列被放满

       但任务还再持续进入则会开始创建新的线程,直到数量到最大线程数。

  5 ThreadFactory:

       实际上是一个线程工厂,用来生产线程执行任务。我们可以选择使用默认的创建工厂,产生的线程都在同一个组内,拥有

     相同的优先级,且都不是守护线程。当然我们也可以选择自定义线程工厂,一般我们会根据业务来指定不同的线程工厂。

  6 Handler :

       任务拒绝策略,有两种情况,第一种是当我们调用shutdown等方法关闭线程池后,这时候即使线程池内部还没有执行完的任务

       但是由于线程池已经关闭,我们再继续想线程池提交任务就会遭到拒绝。另一种情况就是达到最大线程数,线程池已经没有能力

       继续处理新提交的任务时,这时也拒绝。

      


      坚持学习 !!

原文地址:https://www.cnblogs.com/misscai/p/14571575.html