7

我正在寻找一种有效的方法来每天下午 3 点执行一个方法,而不管应用程序最初运行的时间或运行了多长时间。

这必须完全由应用程序完成,无需操作系统干预(例如 Windows 任务计划程序)

我一直在尝试不同配置的 java.util.Timer,但没有成功。

任何帮助,将不胜感激。

谢谢。

4

6 回答 6

16

你应该看看Quartz,它是一个基于 Java 的作业调度系统。

于 2009-04-30T21:31:18.487 回答
2

您可能想要使用类似石英引擎的东西,它可以执行诸如执行错过的任务(例如在ahem崩溃期间)之类的事情,并且它可以消除尝试管理线程的工作。

例如,如果您使用线程并将其置于睡眠状态并在 86400 秒(一天)后将其唤醒,您将在 DST 一天内延迟一小时(天 = 82800 秒)或提前一小时(天 = 90000 秒)醒来,所以小心你选择的任何解决方案

于 2009-04-30T21:39:36.097 回答
2

一个内置的 JDK 方法是按照其他人的建议并首先计算:

  • 当前时间 - 期望时间

然后,您可以使用调度执行器之类的东西来提交任务,并以特定的延迟运行它们。这比Quartz等框架的选项要简单得多 ,但不需要外部依赖项。

此外,您应该始终列出您正在使用的 JDK,以便人们可以为您的 JDK 版本提供解决方案。

于 2009-04-30T22:16:58.660 回答
1

您可以启动一个线程来计算到下一个下午 3 点的差值并在这段时间内休眠。当它醒来时,它会执行该方法并重新计算并休眠。这是你的意思吗?

于 2009-04-30T21:32:48.250 回答
1

正如其他人所说,Quartz 是一种选择,您可以使用它执行类似 cron 的操作、作业或触发器,这里有一个关于此主题的链接:http: //www.ibm.com/developerworks/java/library/j-quartz /index.html

于 2009-04-30T21:55:02.893 回答
1

Jcrontab

Jcrontab 是一个用 Java 编写的调度程序。项目目标是为 Java 项目提供一个功能齐全的时间表。

于 2009-05-01T06:15:57.727 回答