803.ThreadPool(线程池)⽤法与优势?

  1. ThreadPool 优点
    1. 减少了创建和销毁线程的次数,每个⼯作线程都可以被重复利⽤,可执⾏多个任务
    2. 可以根据系统的承受能⼒,调整线程池中⼯作线线程的数⽬,防⽌因为因为消耗过多的内存,⽽把服务器累趴下(每个线程需要⼤约1MB内存,线程开的越多,消耗的内存也就越⼤,最后死机)
      1. 减少在创建和销毁线程上所花的时间以及系统资源的开销
      2. 如不使⽤线程池,有可能造成系统创建⼤量线程⽽导致消耗完系统内存
  2. ⽐较重要的⼏个类:
描述
ExecutorService 真正的线程池接⼝。
ScheduledExecutorService 能和Timer/TimerTask类似,解决那些需要任务重复执⾏的问题。
ThreadPoolExecutor ExecutorService的默认实现。
ScheduledThreadPoolExecutor 继承ThreadPoolExecutor的ScheduledExecutorService接⼝实现,周期性任务调度的类实现。

Java⾥⾯线程池的顶级接⼜是Executor,但是严格意义上讲Executor并不是⼀个线程池,⽽只是⼀个执⾏线程的⼯具。真正的线程池接⼜是ExecutorService。

  1. 任务执⾏顺序:

    1. 当线程数⼩于corePoolSize时,创建线程执⾏任务。
    2. 当线程数⼤于等于corePoolSize并且workQueue没有满时,放⼊workQueue中
    3. 线程数⼤于等于corePoolSize并且当workQueue满时,新任务新建线程运⾏,线程总数要⼩于maximumPoolSize
    4. 当线程总数等于maximumPoolSize并且workQueue满了的时候执⾏handler的rejectedExecution。也就是拒绝策略。