线程池学习记录

1.线程池

private Integer corePoolSize;(核心线程数)
private Integer maxPoolSize;(最大线程数)
private Integer queueCapacity;
private Integer keepAliveSeconds;(目前线程数大于核心线程数的情况下,如果线程的空闲时间大于设置的keepAliveSeconds,则这个线程会被销毁,直到线程数小于或者等于核心线程数。简单理解就是核心线程数的线程空闲时间不受这个参数的影响,比如核心线程数是3,并且当前的线程数是3,有两个线程空闲,则默认不会销毁,除非allowCoreThreadTimeOut设置为true)
private String prefixName;
private boolean allowCoreThreadTimeOut;(默认false,限定核心线程数是否可以销毁)


ThreadPoolTaskExecutor 配置这几个参数

有新任务来到时:

1.如果当前的线程池的线程数还没有达到corePoolSize,不管是否有空闲的线程,都会新增加一个线程处理这个新任务

2.如果发现大于或者等于核心线程数,并且queue队列还没满,则把任务放在queue里面等待。如果queue满了,再查看maxPoolSize,如果发现现在的线程数小于maxPoolSIze,就继续创建新线程处理,如果大于等于maxPoolSize,则不能在创建新的了,要拒绝新到的任务(拒绝策略需要指定)。

在队列没满的时候,线程数是核心线程数,当队列满了,需要的话,才会增加到最大线程数

那么队列中的任务什么时候执行呢?

拒绝策略:

  • AbortPolicy:直接抛出异常,后续的任务也不会执行了,这种一般业务不推荐
  • CallerRunsPolicy:会用主线程去执行这个任务,可能会阻塞主线程。
  • DiscardPolicy:不抛异常,任务直接丢弃
  • DiscardOldestPolicy;会把队列中最先加入的任务抛弃,再加进去。
  • 自定义策略

继续学习中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值