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

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

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

任何帮助,将不胜感激。

谢谢。

有帮助吗?

解决方案

您应该查看 Quartz ,这是一个基于Java的作业调度系统。

其他提示

您可能希望使用类似石英引擎的内容,它可以执行诸如执行任务之类的操作错过了(比如在 ahem 崩溃期间)并且尝试管理线程需要完成工作。

例如,如果您使用线程并将其置于睡眠状态并在86400秒(一天)之后将其唤醒,您将在DST转换时唤醒并延迟一小时(白天= 82800秒)或早期(白天= 90000秒)一天,所以要小心你选择的解决方案

内置的 JDK 方法是按照其他人的建议进行操作并首先计算:

  • 当前时间 - 期望时间

然后你可以使用类似的东西 计划执行者 提交任务,并以特定的延迟运行它们。这比您使用类似框架的选项要简单得多 石英, ,但不需要外部依赖。

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

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

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

Jcrontab

  

Jcrontab是一个用Java编写的调度程序。项目目标是为Java项目提供功能完备的计划。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top