加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

线程池的核心参 数(Java线程池原理及核心参数)

发布时间:2023-02-02 11:00:01 所属栏目:Linux 来源:
导读:  首先看下SDK关于线程池ThreadPoolExecutor类的构造函数源码:

  线程池的核心参数(Java线程池原理及核心参数)

  一、由源码可以看出线程池有几个核心的参数概念:

  1、核心线程数:corePoo
  首先看下SDK关于线程池ThreadPoolExecutor类的构造函数源码:
 
  线程池的核心参数(Java线程池原理及核心参数)
 
  一、由源码可以看出线程池有几个核心的参数概念:
 
  1、核心线程数:corePoolSize【allowCoreThreadTimeOut为false时,线程池中要一直保留的活跃线程数线程池linux,不受空闲时间限制】;
 
  2、最大线程数:maximumPoolSize【线程池中允许的最大的活跃线程数,达到这个值后,不再创建新的线程】;
 
  3、活跃时间:keepAliverTime【一个空闲线程的保活时间,超过这个时间线程就会被回收销毁】;
 
  4、活跃时间单位:unit【保活时间单位】
 
  5、工作队列:workQueue【用于存储未被线程调用的任务,进行排队等待线程池调用】
 
  6、线程工厂:threadFactory【用于向线程池中创建新线程】
 
  7、拒绝策略:handler【用于处理工作队列满了之后新来的任务】
 
  二、线程池执行流程如下:
 
  线程池的核心参数(Java线程池原理及核心参数)
 
  1、当我们提交任务给线程池,如果当前线程池的数量没有达到corePoolSize,线程池会创建新的线程来执行任务;
 
  2、当线程数量达到corePoolSize的时候,后续任务将会进入工作队列进行排队执行,等待空闲线程来调用执行,队列未满之前,线程池中线程个数=核心线程数量;
 
  3、当阻塞队列满了之后,那么将会继续创建(
 
  maximumPoolSize-corePoolSize)个数量的线程来执行任务,如果任务处理完毕,
 
  maximumPoolSize-corePoolSize额外创建的线程可等待keepAliveTime时间之后被自动回收销毁,即超过核心线程数的线程最多空闲keepAliveTime时间;
 
  4、如果达到maximumPoolSize,阻塞队列还是满的状态,那么将根据不同的拒绝策略对应处理。
 
  三、线程池拒绝策略
 
  JDK提供了4种拒绝策略:
 
  线程池的核心参数(Java线程池原理及核心参数)
 
  1. AbortPolicy:直接丢弃任务,抛出异常,这是默认策略
 
  2. CallerRunsPolicy:只用调用者所在的线程来处理任务
 
  3. DiscardOldestPolicy:丢弃等待队列中最旧的任务,并执行当前任务
 
  4. DiscardPolicy:直接丢弃任务,也不抛出异常
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!