Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注,必回关

一、线程池的四种拒绝策略:

  • CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。
    一般并发比较小,性能要求不高,不允许失败。 但是,由于调用者自己运行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大
  • AbortPolicy - 丢弃任务,并抛出拒绝执行 RejectedExecutionException 异常信息。
    线程池默认的拒绝策略。 必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行。
  • DiscardPolicy - 直接丢弃,其他啥都没有
  • DiscardOldestPolicy - 当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue
    中最老的一个任务,并将新任务加入

二、Java中的六种线程池

线程池名称 描述
FixedThreadPool 核心线程数与最大线程数相同
SingleThreadExecutor 一个线程的线程池
CachedThreadPool 核心线程为0,最大线程数为Integer. MAX_VALUE
ScheduledThreadPool 指定核心线程数的定时线程池
SingleThreadScheduledExecutor 单例的定时线程池
ForkJoinPool JDK 7 新加入的一种线程池
  • ThreadPoolExecutor的类图,以及Executors的主要方法
    Java常见的六种线程池、线程池-四种拒绝策略总结_第1张图片

你可能感兴趣的:(java,jvm,开发语言)