线程池

参数说明

  • corePoolSize 核心线程数,默认线程池为空提交任务才创建线程,如果当前运 行的线程数少于corePoolSize,(空闲状态的线程也时运行的线程)则创建新线程来处理任务;如果等于或者多于corePoolSize,则不再创建,核心线程在未设置allowCoreThreadTimeOut时不会被销毁,执行任务后会进入空闲状态,
  • maximumPoolSize 线程池允许创建的最大线程数
  • keepAliveTime 非核心线程闲置的超时时
  • TimeUnit keepAliveTime参数的时间单
  • workQueue 任务队列
  • ThreadFactory 线程工厂
  • RejectedExecutionHandler 饱和策略。这是当任务队列和线程池都满了时所采取的应对策略

执行流程

  1. 如果线程池中的线程数未达到核心线程数,则创建核心线程处理任务。
  2. 如果线程数大于或者等于核心线程数,则将任务加入任务队列,线程池中的空闲线程会不断地从 任务队列中取出任务进行处理。
  3. 如果任务队列满了,并且线程数没有达到最大线程数,则创建非核心线程去处理任务。
  4. 如果线程数超过了最大线程数,则执行饱和策略。

饱和政策

  • AbordPolicy,表示无法处理新任务,并抛出RejectedExecutionException异常。此外还有3种策略,它们分 别如下。
  • CallerRunsPolicy:用调用者所在的线程来处理任务。此策略提供简单的反馈控制机制,能够减缓 新任务的提交速度。
  • DiscardPolicy:不能执行的任务,并将该任务删除。
  • DiscardOldestPolicy:丢弃队列最近的任务,并执行当前的任务。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容