定时任务时间过长会不会影响下次的执行?- 第331篇

前言

       有关定时任务会不会延迟执行了,可以看文章《为什么你要阻碍我,你看我扎不扎你「见鬼,定时任务延迟执行?」 - 第292篇》

https://mp.weixin.qq.com/s/G1-92E7jvvy5Ngp7nIIykg

       本质上来讲,我们这一篇文章的问题的答案在上一篇已经算是给出了答案了,只是没有那么明确,这一节我们来明确的说一下。

       针对这个问题「定时任务时间过长会不会影响下次的执行」,也是考虑定时任务是单线程的还是多线程的。

一、单线程

       有这么一个定时任务:

 
  1. @Scheduled(cron="10 * * * * ? ")

  2. public void aTask(){

  3. DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  4. System.out.println(Thread.currentThread().getName()+":" +sdf.format(new Date())+" --> A任务每10秒执行一次");

  5. try {

  6. TimeUnit.SECONDS.sleep(70);

  7. } catch (InterruptedException e) {

  8. e.printStackTrace();

  9. }

  10. }

如果按照我们的想像的情况下,现在8:00:00的话,那么8:00:10的时候执行第一次,8:01:10的时候执行第二次,以此类推,但是在单线程的情况下却不是这样子执行的,当让我们的定时任务执行过长超过了下一次要执行的时候,那么就需要等到下一次才能执行了,我们看下执行的情况:

scheduling-1:2020-09-28 20:02:10--> A任务每10秒执行一次

scheduling-1:2020-09-28 20:04:10--> A任务每10秒执行一次

scheduling-1:2020-09-28 20:06:10--> A任务每10秒执行一次

       中间总是会隔了1分钟。

二、多线程

       如何开启多线程还不懂嘛,那么请阅读《为什么你要阻碍我,你看我扎不扎你「见鬼,定时任务延迟执行?」 - 第292篇》。

       在多线程情况下,结果是什么样子呢?我们还是直接看下控制塔的打印在来给出结果吧:

myThread-1:2020-09-28 20:09:10--> A任务每10秒执行一次

myThread-1:2020-09-28 20:11:10--> A任务每10秒执行一次

       从这里我们可以看出多线程情况下还是有影响的。

三、异步任务

如何在定时任务中使用异步任务还不懂嘛,那么请阅读《为什么你要阻碍我,你看我扎不扎你「见鬼,定时任务延迟执行?」 - 第292篇》。

       在异步任务的情况下,我们看下结果:

task-1:2020-09-28 20:13:10 -->A任务每10秒执行一次

task-2:2020-09-28 20:14:10 -->A任务每10秒执行一次

       从这里我们可以看出在异步任务的情况下,就不会延迟了,从上面的打印我们可以看出是不同的任务在执行下一次的定时任务。即使上一个任务还没执行完成也不影响下一次的执行了。

。。。。。。。。。。。。。。。。。

版权原因,完整文章,请参考如下:定时任务时间过长会不会影响下次的执行?- 第331篇

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值