线程池技术

2 篇文章 0 订阅
1 篇文章 0 订阅

线程池

线程池关键参数

  1. 核心线程数:corePoolSize

在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来,才创建线程去执行任务,除了调用了prestartAllCoreThreads或者prestartCoreThread()方法,这两个方法是预创建线程的意思,即在没有任务到来之前就创建corePoolSize个线程或者一个线程,默认情况下,创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数达到corePoolSize之后,就会把到达的任务放到缓冲队列当中。

  1. 最大线程数:maximumPoolSize

线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程:在corePoolSize到maximumPoolSize的线程数会被自动释放,而小于corePoolSize的不会。

  1. keepAliveTime

表示线程没有任务执行时,最多保持多久时间会终止,默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池汇总的 线程数大于corePoolSize时,如果一个线程空闲时间达到keepAliveTime,则会终止,我知道线程池中的线程数不超过corePoolSize。但是如果调用了allwCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepalivetime参数也会起作用,直到线程池中的线程数为0

  1. TimeUnit unit

参数keepAliveTime的时间单位,一个JDK里面的时间单位枚举类

  1. BolockingQueue workQueue

    一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响。

  2. ThreadFactory threadFactory

线程工厂,主要用来创建线程,可以是一个自定义的线程工厂,默认是Executors.defaultThreadFatory(),用来在线程池里面创建线程。

  1. RejectedExecutionHandler handler

表示当拒绝处理任务时的策略,也说可以自定义的,有四种拒绝策略,默认是直接抛出异常AbortPolicy()

线程任务拒绝策略

  • 不用线程池线程执行,只用调用者所在线程来运行任务 CallerRunsPolicy
  • 直接丢弃任务 DiscardPolicy
  • 直接抛出异常 AbortPolicy
  • 丢弃队列中最旧的任务,并执行当前任务 DiscardOldestPolicy

为什么要有拒绝策略:

假设:线程池有一个任务队列,用于缓存所有待处理的任务, 正在处理的任务将从任务队列中移出。因此,在任务队列长度有限的情况下,就会出现新任务的拒绝处理问题,需要一种策略来处理这种应该加入任务队列却因为队列已满无法加入的情况,此外,在线程池关闭的时候,也需要对任务加入队列操作进行额外的 协调处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值