- 线程池
- 七个参数
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线程池对象可以接受线程任务
- 核心参数
- 最大线程数
- 存活时间
- 时间单位
- 工作(任务队列)
- 线程工厂
- 拒绝策略
- 线程池的工作流程
- 当线程池接收到任务,先判断线程池中是否有空闲线程,如果没有空闲线程,就判断存活线程数量是否达到核心线程数;
- 如果没有达到核心线程数量就创建新的线程执行该任务,如果达到核心线程数,将该任务优先加入到工作队列中;
- 如果工作队列已满,就判断存活线程数量是否达到最大线程数,如果没有达到,就创建新的线程执行该任务;
- 如果存活线程数超过核心线程数量,当有些线程空闲后,没有任何的工作任务,就会等待最大存活时间;
- 如果超过最大存活时间依然没有任务产生,线程池就会消亡此线程,直到存活线程数量达到核心线程数量;
- 如果存活的线程数量达到线程池最大线程数量,并且所有的线程都在工作,现在添加新的工作任务;
- 新的工作加入到任务工作队列中,如果线程池的工作队列已满,就会执行回绝策略;