JAVA线程池

JAVA线程池
ThreadPoolExecutor
方法七个参数

  1. corePoolSize
    1. 核心线程池个数,日常维护的线程数量
  2. maximumPoolSize
    • 最大线程数,线程池允许创建的最大线程数。任务进来先分配给核心线程,如果核心线程都在忙,则会进入到队列中,如果队列满了, 才会重新创建新的线程,如果线程数超过最大线程数,则执行拒绝策略
  3. keepAliveTime
    • 线程池中空闲线程等待工作的超时时间。核心线程池之外的线程。当线程池中线程数量大于corePoolSize(核心线程池)的值进行活性检查,一旦超时便销毁线程。
  4. TimeUnit
    • 核心线程池以外的线程存活时间的单位,
    • 时间颗粒度转换
  5. BlockingQueue (阻塞队列)
    如果线程池满了,需要将新来的访问加入到队列中 (常使用 ArrayBlockingQueue 和 LinkedBlockingQueue),一定要控制队列的数量,这样避免队列太长,导致FULL GC.
    • ArrayBlockingQueue : 是一个基于数组接口的有界阻塞队列, 此队列按照先进先出的原则对数组进行排序
    • LinkedBlockingQueue : 一个基于链表结构的阻塞队列,此队列按照先进先出排序元素。吞吐量通常高于ArrayBlockingQueue。
    • SynchronousQueue : 一个不存储元素的阻塞队列。每个插入操作必须等到两一个线程调用一处操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue。
  6. ThreadFactory
    1. 用于生成线程,一般我们使用Executors.defaultThreadFactory
  7. RejectedExecutionHandler
    拒绝策略,当线程池(队列满,并且超过最大线程数量)已经满了,但是又有新的任务提交的时候,该采取什么策略有这个来指定
    • ThreadPoolExecutor.AbortPolicy : 丢弃任务并抛出RejectedExecutionException异常。
    • ThreadPoolExecutor.DiscardPolicy :也是丢弃任务,但是不抛出异常。
    • ThreadPoolExecutor.DiscardOldestPolicy :丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
    • ThreadPoolExecutor.CallerRunsPolicy :由调用线程处理该任务
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容