17

我对 Java 比较陌生,我已经选择了一个项目来做。但是,我遇到了障碍。我需要一种在一天中的特定时间运行的方法。我已经做了很多搜索,但我找不到任何看起来可以解决问题的东西。我遇到了 Timer 类,但它似乎以特定的时间间隔运行。调度程序类,似乎有同样的问题。我也遇到了 Quartz,但我认为我需要更轻量级的东西,而且我只能偶尔看看如何做事。

也许,仅仅因为我是新手,我错过了一些可以在这些课程中帮助我的东西,但我真的被困住了,可以使用一些帮助。

如果有人可以将我指向一个将在一天中的某个时间运行某件事的课程,每天(能够取消活动的奖励积分),并告诉我如何正确使用该课程,那就太棒了!

TL;DR:需要一个在一天中的某个时间做某事的课程,而不是每隔一段时间,因为该程序可能会在一天中多次重新启动。

4

3 回答 3

30

尝试 TimerTask 类

欲了解更多信息,请查看 http://oreilly.com/java/archive/quartz.html

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class ReportGenerator extends TimerTask {

  public void run() {
    System.out.println("Generating report");
    //TODO generate report
  }

}

class MainApplication {

  public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar date = Calendar.getInstance();
    date.set(
      Calendar.DAY_OF_WEEK,
      Calendar.SUNDAY
    );
    date.set(Calendar.HOUR, 0);
    date.set(Calendar.MINUTE, 0);
    date.set(Calendar.SECOND, 0);
    date.set(Calendar.MILLISECOND, 0);
    // Schedule to run every Sunday in midnight
    timer.schedule(
      new ReportGenerator(),
      date.getTime(),
      1000 * 60 * 60 * 24 * 7
    );
  }//Main method ends
}//MainApplication ends
于 2011-08-06T07:03:50.073 回答
5

如果可能的话,我强烈建议最好的方法是使用操作系统的调度程序调用脚本或 Java 应用程序:例如,*nix 中的“cron”或 Windows 中的“任务调度程序”。

于 2011-08-06T06:58:01.977 回答
2

一种可能性是使用外部调度程序 - 取决于所需的准确性。在 UNIX 上使用 CRON,在 Windows 上使用 Windows 调度程序。这很好地将时间与做事隔离开来。

您可以使用 Timer 并创建一个简单的类,根据所需的粒度每分钟或每 5 分钟检查一次时间。这将是非常轻量级的。

于 2011-08-06T07:46:22.800 回答