线程池

发布时间 2024-01-05 15:23:20作者: 卡皮巴拉
  • 线程池
  • 七个参数
    BlockingQueue workQueue=new ArrayBlockingQueue(10);//最多存放10个任务
    ThreadFactory threadFactory= Executors.defaultThreadFactory();
    //回抛出异常的回绝策略
    RejectedExecutionHandler reh=new ThreadPoolExecutor.AbortPolicy();
    ExecutorService es = new ThreadPoolExecutor(5,10,300L,TimeUnit.MILLISECONDS,workQueue,threadFactory,reh);
    //线程池管理线程对象 es线程池对象可以接受线程任务
  1. 核心参数
  2. 最大线程数
  3. 存活时间
  4. 时间单位
  5. 工作(任务队列)
  6. 线程工厂
  7. 拒绝策略
  • 线程池的工作流程
  1. 当线程池接收到任务,先判断线程池中是否有空闲线程,如果没有空闲线程,就判断存活线程数量是否达到核心线程数;
  2. 如果没有达到核心线程数量就创建新的线程执行该任务,如果达到核心线程数,将该任务优先加入到工作队列中;
  3. 如果工作队列已满,就判断存活线程数量是否达到最大线程数,如果没有达到,就创建新的线程执行该任务;
  1. 如果存活线程数超过核心线程数量,当有些线程空闲后,没有任何的工作任务,就会等待最大存活时间;
  2. 如果超过最大存活时间依然没有任务产生,线程池就会消亡此线程,直到存活线程数量达到核心线程数量;
  3. 如果存活的线程数量达到线程池最大线程数量,并且所有的线程都在工作,现在添加新的工作任务;
  4. 新的工作加入到任务工作队列中,如果线程池的工作队列已满,就会执行回绝策略;