12

我的问题是:quartz 调度程序是如何工作的,它与实现 Runnable 接口(基本上是一个线程)的普通类有什么不同,后者根据指定的时间间隔唤醒并执行所需的工作?

它只是一种方便的做事方式(使用石英调度程序),例如通过 XML 文件指定作业配置以及向现有调度程序轻松添加新作业,还是还有其他功能?更重要的是,我的意思是它是否进行了任何类型的优化,例如它不会在整个持续时间内挂在线程上并释放它?它是一种轮询机制,其中线程不断轮询系统时间并查看指定的时间间隔是否已过,还是它与系统时钟进行某种注册,时钟本身通知石英调度程序?

请让我知道是否需要对上述问题进一步澄清。

4

1 回答 1

22

发布问题后,我浏览了网络上的一些内容,并发现了一些有用的见解。很抱歉发布一个问题并自己回答,但这对任何可能想理解相同问题的人都有用。

以下是 Quartz 的优点以及它与通常的 Java 计时器接口的比较:

  • Quartz 非常灵活,包含多个可以单独或一起使用的使用范例,以实现您想要的行为,并使您能够以对您的项目最“自然”的方式编写代码。
  • Quartz 非常轻巧,需要很少的设置/配置 - 如果您的需求相对基本,它实际上可以“开箱即用”使用。
  • Quartz 是容错的,并且可以在系统重新启动之间保留(“记住”)您计划的作业。

另一方面,它克服了Timer接口中的以下问题:

  • 定时器没有持久化机制。
  • 计时器具有不灵活的调度(只能设置开始时间和重复间隔,不能基于日期、时间等)
  • 定时器不使用线程池(每个定时器一个线程)
  • 计时器没有真正的管理方案——你必须编写自己的机制来记忆、组织和检索任务名称等。

如果有人想在上面添加任何信息,请随时这样做。

于 2012-10-16T06:59:11.337 回答