JAVA线程池备忘录

线城池的实现

JAVA中,JDK自带的线程池实现类是

java.util.concurrent.ThreadPoolExecutor

直接创建这个类的实例即可创建一个线程池

线程池的参数说明

ThreadPoolExecutor有很多个构造函数,都是围绕着以下6个参数来变的

  1. corePoolSize 核心线程数,通常情况下,是线程池最少维持的线程数量
  2. maximumPoolSize 最大线程数,限制最大创建的线程数
  3. keepAliveTime 空闲线程等待的最长时间,构造器中通常会带上一个时间单位(TimeUnit)
  4. threadFactory 线程工厂,需要创建线程时,就会调用threadFactory的newThread方法
  5. rejectedExecutionHandler 拒绝策略,线程队列满了后再execute时,据此来决定需要做什么操作,比如拒绝、单线程run等
  6. workQueue 线程队列,一般有链表、环状List两大实现
  7. allowCoreThreadTimeOut 是否允许核心线程在空闲keepAliveTime后关闭

自带的rejectedExecutionHandler

  1. CallerRunsPolicy 如果队列满了,再execute时会直接在当前线程中调用run方法
  2. AbortPolicy 默认的策略,队列满后再execute会抛出一个异常
  3. DiscardPolicy 此策略啥都不干,相当于把这个任务丢掉了
  4. DiscardOldestPolicy 和上一个不同,这个策略丢弃队列中最开头那个任务.

JAVA线程池的状态流转

在这里插入图片描述

注意事项

众所周知,shutdown后,线程池不再接受新的任务,但会处理队列中已存在的请求,实际上是在ThreadPoolExecutor.execute的时候拒绝新请求的

但我们可以通过workQueue.offer的形式,绕过线程池的拒绝策略,直接往工作队列中增加任务,线程池会一直保持shutdown状态,直到workQueue为空

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值