记一次 线程池爆 的事件

    在一个类中,可能会依赖多个其他的方法或者外部信息,我们目前的做法是启动线程并行去获取这些信息。这样做就会用到线程池。用到线程池就有可能会出现线程池阻塞的情况。

    我们用到的是Callable和Future创建线程(和Runnable接口不一样,Callable接口提供了一个call()方法作为线程执行体,call()方法比run()方法功能要强大。1、call()方法可以有返回值2、call()方法可以声明抛出异)。

    但是最近一次发布后抛出了

org.springframework.core.task.TaskRejectedException: Executor [java.util.concurrent.ThreadPoolExecutor@431595e6[Running, pool size = 32, active threads = 32, queued tasks = 1000, completed tasks = 76395]] did not accept task

从上面的报错中我们可以看到,我们的线程池设置的最大线程数是32,等待队列是1000,而我们设置的core为4,之前设置时以为,当线程数大于4个时就会继续创建线程,直到达到最大的32个线程数,但是在网上查了资料以后发现,线程池创建线程是超过最大的等待队列1000以后才会继续创建线程直至32个,所以在出现这个错误时,其实已经有1032个线程在等待中了。

可以从配置数上看到,我们的线程池设置是有问题的,常驻线程、最大线程 偏小,而等待线程则过大,后面我们调整为各个参数。

但是此次线程池打满的原因是因为,有位小伙伴再异步线程中 调用外部接口,因为我们接口请求量比较大,再线程中有接口请求的话,那么此次线程在等待 接口的响应,如果接口响应比较慢,那么次线程一直等待,最后会造成等待线程积压,导致线程爆掉。

所以在线程中不要有接口访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值