该如何进行任务的调度?

发布于 2022-08-29 18:31:06 字数 247 浏览 48 评论 0

背景:有一系列的周期性任务,任务在定义时就指定了执行时间,我要用一个timer来执行他们,这个timer是一直运行着,查看任务,如果任务到了指定的时间,那就调度任务执行他们。

问题:我该怎么设计这个timer呢,时时刻刻来查看当前是否有任务到了指定的执行时间?我知道这个会有误差的,一不小心就过了任务的执行时间,但是对于精确度要求不高,但是想能尽可能的接近于任务的执行时间,那我这个timer该怎么进行调度呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离鸿 2022-09-05 18:31:06

基本的思路是,每次调度一个任务地时候,计算出下一次需要调度的任务和发生时间,然后一直sleep到这个时间,调度下一个任务,如此往复即可,这样你就不用时时刻刻轮询查看了。
为了找出下一次需要调度的任务,一个简单的方法是用小顶堆,将所有任务以时间为key插入这个堆,堆顶就是下次需要的任务(时间最早)。
每次调度任务时将堆顶的任务弹出,调整堆,完成后堆顶就是下一次需要调度的任务。
需要注意的是,每次弹出堆顶任务并完成调整之后,你还需要继续看堆顶的任务是否也已经到期,因为可能存在多个设定了相同时间的任务。

具体到Java,你可以用PriorityQueue。

嘿嘿嘿 2022-09-05 18:31:06

看下Java的Timer类的实现机制就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文