线程池七大核心参数及执行过程

线程池七大核心参数

1.corePoolSize(核心线程数)

2.maxPoolSize(最大线程数)

3.keepAliveTime(空闲回收时间)

4.unit(回收时间单位)

5.workQueue(任务队列)

6.threadFactory(线程工厂,用于创建线程,一般为默认线程工厂即可)

7.handler(拒绝策略)

 

当调用 execute(()方法添加一个请求任务时,线程池会做如下判断:

当创建线程任务数小于核心线程数corePoolSize时则直接创建执行,当创建线程任务数大于核心线程数时则加入任务队列workQueue中

(常用的任务队列有 有界队列1.ArrayBlockingQueue,2.SynchronousQueue,

无界队列:1.LinkedBlockingQueue,暂不详述。)等待,

当任务队列也放满之后查看是否大于最大线程数maxPoolSize,如果这时候队列满了且正在运行的线程数量还小于 naximumPoolSize,,那么还是要创建非核心线程立刻运行这个任务,如果大于最大线程数则执行拒绝策略handler

(拒绝策略有分为四种:

1. CallerRunsPolicy :这个策略重试添加当前的任务,他会自动重复调用 execute() 方法,直到成功。

2. AbortPolicy :对拒绝任务抛弃处理,并且抛出异常。

3. DiscardPolicy :对拒绝任务直接无声抛弃,没有异常信息。

4. DiscardOldestPolicy :对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。

)如果没有则创建执行。当一个线程完成任务时,它会从队列中取下一个任务来执行。当一个线程无事可做超过一定的时间( keepAliveTime))时,线程池会判断:如果当前运行的线程数大于 corePoolSize,,那么这个线程就被停掉。所以线程池的所有任务完成后它最终会收缩到 corePoolSize的大小。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值