相关文章推荐
一身肌肉的麦片  ·  OPENROWSET ...·  1 年前    · 
不爱学习的火腿肠  ·  c/c++ ...·  2 年前    · 
苦恼的登山鞋  ·  jsonobject转hashmap - ...·  2 年前    · 
本文对比分析了Java内置的Timer和开源的Quartz定时任务库。Timer单线程执行,任务间相互影响,而Quartz支持多线程,异常处理更灵活,调度更精确。Quartz通过Cron表达式实现复杂调度,适用于大型项目,且商业使用无授权问题。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

Timer

Timer实现定时任务调度需要Timer和TimerTask两个组件,使用时,继承TimerTask抽象类,实现run方法,由Timer进行调度,实现单次执行或以固定间隔执行。

Quartz

Quartz由三个主要组件组成:调度器Scheduler,触发器Trigger,任务Job,使用时,继承实现job接口,创建对应的JobDetail对象,创建Trigger对象,设置触发时间,交由Scheduler进行调度。

Quarz相对Timer存在的区别

1、执行方式

  • Timer是单线程执行,同一个Timer调度的任务,如果上一个任务没有执行完成,下一个任务会被延迟执行,同时如果某个任务抛出了没有被catch住的异常,会导致整个timer调度的所有任务被取消.
  • Quartz是多线程执行,框架维护了一个线程池,可以通过调整配置文件,修改线程池的大小,以此限制同时执行的任务数量,当某个job抛出异常时,可以通过方式选择是重试此job,或者取消这个job的调度,对于其他的job不会产生影响。不希望job并发执行时,可以通过注解的方式限制job为串行执行。

2、任务调度

  • Timer只能调度单次执行的任务,或以固定时间间隔调度任务.
  • Quartz可以通过创建Trigger时,使用不同的Schedule,灵活、准确的控制日期节点以及执行次数。例如:SimpleSchedule可以实现以固定时间间隔进行调度,同时可以设定调度次数,调度终止时间,调度开始时间等。CronSchedule可以通过Cron表达式,实现相对友好的类似于日历的调度,例如每天的13点01分,每个月的最后一个工作日等。

Quartz取代Timer的可行性

Quartz使用Apache 2 License进行授权,可以商用,不存在授权方面的问题

Quartz框架被广泛使用在各类项目中,经过了长期迭代,稳定性具有一定保障

工作量上使用Quartz进行任务调度不会产生很大的代码量且不会有过于复杂的逻辑,熟悉Quartz框架的话预计可以在1到2天内完成开发

Timer Quartz 的区别 1、 Timer java .util包自带的 定时 器, quartz 是一个第三方提供的 定时 器 2、 Timer 的任务是通过创建 Timer Task子类进行实现, quartz 则必须要新建一个class文件实现Job接口重写execute方法定义任务 3、 Timer 只能控制执行的周期及开始时间,而 quartz 可以灵活、准确的控制日期节点以及执行次数 常见的 定时 器分两大块: 1、 Timer java .util包中提供的 定时 器 2、 quartz 第三方提供的 定时 器就像
1)精确度 功能 Quartz 可以通过 cron 表达式精确到特 定时 间执行,而 Timer Task不能。 Quartz 拥有 Timer Task所有的功能,而 Timer Task则没有。 2)任务类的数量 Timer Task Quartz 每次执行任务时,每次调用的是不是都是同一个任务类对象,还是每次都不一样?现在做如下实验,每次执行任务时,将任
1: Quartz :Spring配置文件:<!-- 配置触发器 --> <!-- 配置JOB类 --> <bean id="schedulers" class="com. java .activiti.scheduler.schedulers"></bean> <!-- 配置JobDetail --> <bean
[size=medium]这是学习 定时 器找到的第二篇文章 地址:http://blog.csdn.net/zlxdream815/article/details/8177574 timer 定时 器。(这个比较简单, timer java .util包下一个类) 为了更好的了解,写了如下例子 [/size] [code=" java "]public class MyTask extends T...
这近闲暇无事,研究 定时 timer Quartz 。也在网上看了一些例子,大多数要不是讲得很笼统就是就得很深奥。仔细想来 定时 器不就是相当于 定时 触发的装置,这样想来理解就更容易了。 第一个例子。 timer 定时 器。(这个比较简单, timer java .util包下一个类) 为了更好的了解,我写了两个 定时 器类,很被集成 Timer Task。 public class MyTask extends Ti
三十一. 定时 定时 器跟闹钟的功能类似,可以定义一个时间来运行一段程序,比如实时的数据检测 或者是网上各种网站视频会员都是用计时器来提醒用户。 常见的 定时 器有 java .util包提供的 Timer 定时 第三方提供的quzrtz 定时 Timer 定时 quartz 定时 器的区别 1、 Timer java .util包自带的 定时 器, quartz 是一个第三方提供的 定时 器 2、 Timer 的任务是通过创建 Timer Task子类进行实现, quartz 则必须要新建一个class文件实现Job接口重写execut
1.单线程的 定时 器存在很多问题, 定时 器只是 定时 把消息WM_ TIMER 访到线程的消息队列里,但并不保证消息会立即被响应,如果碰巧系统比较忙,消息可能会在队列里放一段时间才被响应,这样会造成本来应该间隔一段时间发生的消息连续发生了。 2. 。NET FrameWork带来了新的解决方案 Server Timer s System. Timer s. Timer 基于服务器的计时器,位于"工...
北京某高校可用的电话号码有以下几类,校内电话号码由4位数字组成,第1位数字不是0,校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0) 17617