搜索

springboot线程池任务调度类 -- ThreadPoolTaskScheduler介绍

gecimao 发表于 2019-07-15 14:22 | 查看: | 回复:

  下面介绍一下此bean对象如何实现任务调度,以及如何支持基于cron表达式的任务。

  一、如何实现任务调度?ThreadPoolTaskScheduler其实底层使用也是java自带的线程池,源码分析如下:

  可以看出,其实也就是初始化了一个指定核心线程数的线程池,任务的调度就是通过此线程池成员变量实现。

  注意红色框中的代码,创建了一个ReschedulingRunnable实例,并调用其中的schedule方法,返回一个Future结果。一起看下ReschedulingRunnable这个类中的schdule方法

  可以看出,首先根据cron表达式计算出下一个执行的delay,然后调用线程池的schedule方法,在指定延迟时间后执行当前这个对象的任务,到了执行时间后,

  在方法第二句中,先执行任务,执行完成后,更新trigger上下文,然后再次调用schedule方法,那么在schedule方法中,又会再次计算下一次的执行时间点,提交下一次的执行任务,如此循环完成任务的调度。

  上面的描述中只是说了大概的原理,其实还有些可以深究的地方,比如super.run()这句,如果方法中抛出了异常会不会导致整个任务的中断,无法执行下一次的任务?源码针对这个问题又是如何规避的呢?

本文链接:http://olivierlutaud.net/diaoduxinxichi/721.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部