JavaEE-线程池的执行流程和拒绝策略

线程池的执行流程

官方文档里ThreadPool的构造方法最多参数的一组是这样表示的:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
Creates a new ThreadPoolExecutor with the given initial parameters.

理解 ThreadPoolExecutor 构造方法的参数

把创建一个线程池想象成开个公司 . 每个员工相当于一个线程 .

corePoolSize: 正式员工的数量 . ( 正式员工 , 一旦录用 , 永不辞退 )
maximumPoolSize: 正式员工 + 临时工的数目 . ( 临时工 : 一段时间不干活 , 就被辞退 ).
keepAliveTime: 临时工允许的空闲时间 .
unit: keepaliveTime 的时间单位 , 是秒 , 分钟 , 还是其他值 .
workQueue: 传递任务的阻塞队列
threadFactory: 创建线程的工厂 , 参与具体的创建线程工作 .
RejectedExecutionHandler: 拒绝策略 , 如果任务量超出公司的负荷了接下来怎么处理 .

在这里插入图片描述

线程池的拒绝策略

  • AbortPolicy(): 超过负荷 , 直接抛出异常 .
  • CallerRunsPolicy(): 调用者负责处理
  • DiscardOldestPolicy(): 丢弃队列中最老的任务 .
  • DiscardPolicy(): 丢弃新来的任务 .
  • 	ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, // 核心线程数
        10, // 最大线程数
        5, // 线程空闲时长
        TimeUnit.SECONDS, // 线程空闲时长的时间单位
        new LinkedBlockingQueue<>(100), // 任务队列
        new ThreadPoolExecutor.DiscardPolicy()); // 拒绝策略为忽略最新任务
    

猜你喜欢

转载自blog.csdn.net/weixin_61341342/article/details/129864987