org.springframework.core.task.TaskRejectedException 异常

具体错误信息如下:
2022-01-25 00:00:00.094 [SockJS-3] ERROR o.s.s.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task.
org.springframework.core.task.TaskRejectedException: Executor [java.util.concurrent.ThreadPoolExecutor@3c5e6177[Running, pool size = 200, active threads = 200, queued tasks = 10, completed tasks = 91597]] did not accept task: org.springframework.aop.interceptor.AsyncExecutionInterceptor$1@1937c85a
	at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.submit(ThreadPoolTaskExecutor.java:323)
	at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.doSubmit(AsyncExecutionAspectSupport.java:280)
	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.invoke(AsyncExecutionInterceptor.java:130)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
	at com.yo.project.module.system.component.QuartzConfig$$EnhancerBySpringCGLIB$$e7c895d1.timingImplement(<generated>)
	at sun.reflect.GeneratedMethodAccessor228.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
	at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

有2种原因可能导致此异常:

  1. 线程池ThreadPoolExecutor 显示的shutdown()之后,再向线程池提交任务,如果你配置的拒绝策略是 AbortPolicy 的话,就会抛出这个异常。
  2. 队列满了,而且池中的线程数也达到了最大线程数,所以新添加的任务被拒绝了。
如果是队列满了:

原理分析:

  1. 初始时,程序中活跃的线程为 0,当程序启动后会开始创建线程
  2. 当活跃线程数小于核心线程数时,创建线程执行任务
  3. 当活跃线程数大于核心线程数是,将任务放进队列中等待执行
  4. 当队列满了,且活跃线程数小于最大线程数时,再创建线程执行队列中任务
  5. 当活跃线程数等于最大线程数时,抛出异常 RejectedExecutionException 拒绝任务

解决方案:

  1. 采用无界队列,也就不会出现任务满的情况了,即:把queue换成LinkedBlockingQueue,不过这种情况,你的最大线程数就没意义了,只会保持核心线程数在运行
  2. 增加最大线程数,并设置拒绝策略为抛弃旧的任务(new ThreadPoolExecutor.DiscardOldestPolicy())
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值