定时任务方案大百科(上)

简介: 节前有更新一篇定时任务的相关文章《延时消息之时间轮》,有朋友提出希望可以完整的介绍下常见的定时任务方案,于是便有了这篇文章。

Timer


本次会主要讨论大家使用较多的方案,首先第一个就是 Timer 定时器,它可以在指定时间后运行或周期性运行任务;使用方法也非常简单:



这样便可创建两个简单的定时任务,分别在 3s/5s 之后运行。


使用起来确实很简单,但也有不少毛病,想要搞清楚它所存在的问题首先就要理解其实现原理。


实现原理


定时任务要想做到按照我们给定的时间进行调度,那就得需要一个可以排序的容器来存放这些任务。


Timer 中内置了一个 TaskQueue 队列,用于存放所有的定时任务。



其实本质上是用数组来实现的一个最小堆,它可以让每次写入的定时任务都按照执行时间进行排序,保证在堆顶的任务执行时间是最小的。


这样在需要执行任务时,每次只需要取出堆顶的任务运行即可,所以它取出任务的效率很高为


结合代码会比较容易理解:



在写入任务的时候会将一些基本属性存放起来(任务的调度时间、周期、初始化任务状态等),最后就是要将任务写入这个内置队列中。



在任务写入过程中最核心的方法便是这个 fixUp() ,它会将写入的任务从队列的中部通过执行时间与前一个任务做比对,一直不断的向前比较。


如果这个时间是最早执行的,那最后将会被移动到堆顶。



通过这个过程可以看出 Timer 新增一个任务的时间复杂度为


再来看看它执行任务的过程,其实在初始化 Timer 的时候它就会在后台启动一个线程用于从 TaskQueue 队列中获取任务进行调度。



所以我们只需要看他的 run() 即可。



从这段代码中很明显可以看出这个线程是一直不断的在调用


task = queue.getMin();


来获取任务,最后使用 task.run() 来执行任务。



getMin() 方法中可以看出和我们之前说的一致,每次都是取出堆顶的任务执行。


一旦取出来的任务执行时间满足要求便可运行,同时需要将它从这个最小堆实现的队列中删除;也就是调用的 queue.removeMin() 方法。



其实它的核心原理和写入任务类似,只不过是把堆尾的任务提到堆顶,然后再依次比较将任务往后移,直到到达合适的位置。


从刚才的写入和删除任务的过程中其实也能看出,这个最小堆只是相对有序并不是绝对的有序。


源码看完了,自然也能得出它所存在的问题了。


  • 后台调度任务的线程只有一个,所以导致任务是阻塞运行的,一旦其中一个任务执行周期过长将会影响到其他任务。


  • Timer 本身没有捕获其他异常(只捕获了 InterruptedException),一旦任务出现异常(比如空指针)将导致后续任务不会被执行。


相关文章
|
4月前
|
存储 监控 安全
服务器常见问题以及处理方案
服务器常见问题以及处理方案
|
4月前
|
SQL 安全 测试技术
项目迁移到云服务器,如何做迁移测试?
项目迁移到云服务器,如何做迁移测试?
|
6月前
|
缓存 弹性计算 编解码
阿里云双十一2核8G配置服务器优惠价格表参考,看看选哪款合适
阿里云2023的双十一优惠活动已经开启了,2核8G配置有经济型e、通用算力型u1和通用型g7和g8i与g8a实例可选,具体配置还需要看想要购买的云服务器实例规格和配置及带宽大小,小编来详细说说阿里云服务器2核8G配置有哪些可选实例规格及不同带宽情况下的价格。
阿里云双十一2核8G配置服务器优惠价格表参考,看看选哪款合适
|
11月前
|
安全 容灾 网络安全
阿里云主机简介和购买使用流程
阿里云是阿里巴巴旗下的云计算品牌,其主机产品作为阿里云的核心产品之一,受到了越来越多用户的青睐。通过阿里云主机,用户可以获得高性能、高安全、高可靠的计算资源,更好地满足自己的业务需求。本文将对阿里云主机进行全面介绍,包括主机类型、性能特点、购买流程等。
|
11月前
|
存储 弹性计算 小程序
阿里云服务器的四种购买方式及其适合对象和购买流程简介
对于第一次购买云服务器的新手用户来说,阿里云服务器购买页面有点复杂,从云服务器购买、配置选择到网站上线全过程都是很多新手用户关心的问题,2023年了,小编决定写一篇阿里云服务器购买流程的图文教程。
348 1
阿里云服务器的四种购买方式及其适合对象和购买流程简介
|
弹性计算 容灾 安全
阿里云服务器配置选择流程
阿里云服务器配置选择流程,2023阿里云服务器选购流程更新,选购云服务器有两个入口,一个是选择活动机,只需要选择云服务器地域、系统、带宽即可;另一个是在云服务器页面,自定义选择云服务器配置,这种方式购买云服务器较为复杂,需要选付费方式、地域及可用区、ECS实例规格、镜像、网络、公网IP、安全组等配置,阿里云百科来阿里云服务器购买流程指南2023新版教程:
|
弹性计算 容灾 安全
阿里云服务器如何购买?三种方式可买(图文举例流程)
阿里云服务器如何购买?三种方式可买(图文举例流程)2023阿里云服务器购买流程更新,选购云服务器有两个入口,一个是选择活动机,只需要选择云服务器地域、系统、带宽即可;另一个是在云服务器页面,自定义选择云服务器配置,这种方式购买云服务器较为复杂,需要选付费方式、地域及可用区、ECS实例规格、镜像、网络、公网IP、安全组等配置,阿里云百科来阿里云服务器购买流程指南2023新版教程:
192 0
阿里云服务器如何购买?三种方式可买(图文举例流程)
|
存储 人工智能 机器人
如果有不限量云资源,先来做一个超级大模型
众所周知,人工智能发展的进度与存储能力成正比关系,也就是说存储能力决定了人工智能的发展程度。为什么这样讲?原因就是大数据、云计算都与大容量存储密切相关,尤其是现在井喷式的大数据发展,大体量的数据存储以及运算处理关于存储的要求是上不封顶的需求,就拿近几个月火爆全球的chatGPT的模型也是基于超大超强算力来实现的。
341 1
如果有不限量云资源,先来做一个超级大模型
|
存储 弹性计算 固态存储
如何选择阿里云服务器?配置选购流程全解析
阿里云服务器配置怎么选择比较好?公司可以选择ECS计算型c7、通用型g6等独享型云服务器2核4G起步,个人用户选择ECS共享型s6云服务器1核2G配置,关于阿里云服务器配置的选择还是要根据实际使用场景来选择,云服务器配置包括ECS实例规格、CPU内存配置、公网带宽和系统盘
197 0
如何选择阿里云服务器?配置选购流程全解析
|
负载均衡 Java API
定时任务方案大百科(下)
节前有更新一篇定时任务的相关文章《延时消息之时间轮》,有朋友提出希望可以完整的介绍下常见的定时任务方案,于是便有了这篇文章。