Executors线程池

  • newCacheThreadPool(缓存线程池):阻塞队列为SynchronousQueue,核心线程数0,最大线程数为

    Integer.MAX_VALUE
    

    ,非核心线程存活时间60s

  • newFixedThreadPool(定长线程池):阻塞队列为LinkedBlockingQueue,可能会导致OOM

  • newScheduledThreadPool(定长周期线程):阻塞队列为 DelayedWorkQueue

  • newSingleThreadExecutor(单线程池):阻塞队列为LinkedBlockingQueue,核心线程数和最大线程数为1

  • ThreadPoolExecutor(线程池构造类):

    处理流程:核心线程先接需求,当核心线程数满了,任务进入队列,当队列也满了,判断最大线程数是否已满,没有满就创建新线程执行任务,当最大线程数也满了就采取饱和策略

    • corePoolSize :核心线程数

    • maximumPoolSize:最大线程数

    • keepAliveTime:线程存活时间

    • TimeUnit:存活时间单位

    • BlockQueue:阻塞队列

    • ThreadPoolFactory:线程池工厂

    • handler:饱和策略。

      分别是:AbortPolicy 抛出异常(默认),DiscardPolicy丢弃,DiscardOldestPolicy丢弃队列中最老的任务当前线程交给线程池处理,CallerRunsPolicy交给调用线程池的线程处理

参考:https://juejin.im/post/5d1882b1f265da1ba84aa676

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.简介 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统...
    htkeepmoving阅读 525评论 0 2
  • 前言 掌握线程池是后端程序员的基本要求,相信大家求职面试过程中,几乎都会被问到有关于线程池的问题。我在网上搜集了几...
    Jay_Wei阅读 981评论 0 0
  • 前言 掌握线程池是后端程序员的基本要求,相信大家求职面试过程中,几乎都会被问到有关于线程池的问题。我在网上搜集了几...
    勤奋的码农阅读 1,304评论 0 1
  • 线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任...
    安仔夏天勤奋阅读 1,039评论 0 10
  • 线程的两种创建方式:继承Thread类或者实现Runnable接口,Thread类本质上是实现了Runnable接...
    繁星追逐阅读 613评论 0 1