线程池

  1. 线程池:

(1) 线程池的返回值ExecutorService简介:

ExecutorServiceJava提供的用于管理线程池的接口。该接口的两个作用:控制线程数量和重用线程

(2)4中常用线程池

  1. Executors.newCacheThreadPool():可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务
  2. Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程。
  3. Executors.newScheduledThreadPool(int n):创建一个定长线程池,支持定时及周期性任务执行
  4. Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

 

ThreadPoolExecutor为例:

 

继承体系:

 

 

 

 

 

构造方法:

 

 

 

 

corePoolSize: 线程池核心线程数

maximumPoolSize:线程池最大数

keepAliveTime: 空闲线程存活时间

unit: 时间单位         

workQueue: 线程池所使用的缓冲队列

threadFactory:线程池创建线程使用的工厂

handler: 线程池对拒绝任务的处理策略

 

 

 

线程池运行过程:

  1. 构建线程池时初始线程池中的线程数是0
  2. 两个任务->创建两个核心线程
  3. 第三个任务->添加到任务队列
  4. 一直到任务队列满了为止 ->下一个任务线程池开始创建临时线程处理
  5. 如果任务队列满了并且达到了最大线程数->下一个到来的任务,线程池启用

拒绝机制。

默认的拒绝策略为抛异常

 

 

线程池的五种状态:

 

 

 

  1. 线程池调用了shutdown()方法:

   线程池不再接受任务,任务队列中还存在的任务会继续执行完。

  1. 调用shutdownNow()方法:

线程不在执行当前的任务

  1. 当线程都停下来后进入tidying状态
  2. 执行terminated方法  terminated方法系统没有实现,需要自己实现。
  3. Terminated状态

 

posted @ 2021-10-10 22:50  timelfb  阅读(67)  评论(4)    收藏  举报