线程池

线程池知识点

线程池的执行流程

  1. 接收到请求后首先判断核心线程有没有满;
  2. 如果核心线程没满的话,那么就创建一个线程处理请求;
  3. 如果核心线程满了的话,那么就看看阻塞队列是否已经满了;
  4. 如果阻塞队列没满的话就加入阻塞队列;
  5. 如果阻塞队列满了的话就判断最大线程数是否达到;
  6. 如果最大线程数没有达到的话,就创建一个线程去处理请求;
  7. 如果最大线程数已经达到的话,就执行拒绝策略;
  8. 当线程的空闲时间超过了存活时间的话,那么就把空闲线程销毁,保留核心线程数;

合理配置线程池

  • CPU密集型,CPU密集型任务配置尽可能少的线程数量:一般公式:CPU核数+1个线程的线程池
  • IO密集型,I0密集型时,大部分线程都阻塞,故需要多配置线程数:参考公式:CPU核数11-阻塞系数 阻塞系数在0.8~0.9之间比如8核CPU:8/1-0.9=80个线程数

拒绝策略

  • abortpolicy: 这种是直接抛出异常的形式
  • discard: 丢弃策略
  • discard: 丢弃等待时间最长的请求
  • callerruns: 这个是调用者执行策略;
  • 也可以自定义拒绝测略

线程池的优势

  1. 降低资源消耗
  2. 提高响应速度
  3. 提高线程的可管理性
posted @ 2020-10-29 14:01  不变的是改变  阅读(25)  评论(0编辑  收藏  举报