Java - 安排日常任务

时间:2009-04-30 21:27:42

标签: java scheduling timer task

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

这必须完全来自没有操作系统干预的应用程序(例如Windows任务计划程序)

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

任何帮助都将不胜感激。

感谢。

6 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:2)

您可能希望使用像quartz engine之类的东西,它可以执行诸如执行错过的任务(例如在 ahem 崩溃期间)并且尝试管理的工作线程。

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

答案 2 :(得分:2)

内置的JDK方式是做其他人建议的并首先计算:

  • currentTime - desiredTime

然后,您可以使用类似a schedule executor的内容来提交任务,并以特定延迟运行它们。这比使用Quartz等框架的选项简单得多,但不需要外部依赖。

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

Jcrontab

  

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