簡體   English   中英

Java中的Timer和TimerTask

[英]Timer and TimerTask in java

我想每天晚上5點使用Java Timer和TimerTask來執行作業。 請幫我解決這個問題。

我認為以下方法存在問題...

schedule(TimerTask task, Date time)

----只能將日期指定為第一天,而不能在以后的幾天使用。

schedule(TimerTask task, Date firstTime, long period)

----可以給出初始的開始時間以及執行的時間,在這里,如果我是在下午4點晚上啟動調度程序,那么該如何提起下一個執行時間。 如果我將延遲時間設置為1小時,則每隔一小時就會呼叫一次。

schedule(TimerTask task, long delay)

-這不適用於根據開始時間執行操作的方法。

schedule(TimerTask task, long delay, long period)

-這不適用於根據開始時間執行操作的方法。

我建議您切換到Quartz Cron Trigger ,它非常輕巧且易於使用

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
//Job1 is scheduled to run everyday evening at 5 O' clock

JobDetail job = newJob(SimpleJob.class)
    .withIdentity("job1", "group1")
    .build();

CronTrigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .withSchedule(cronSchedule("0 0 17 * * ?"))
    .build();

sched.scheduleJob(job, trigger);

嘗試

    Calendar c = Calendar.getInstance();
    c.clear(Calendar.MILLISECOND);
    c.clear(Calendar.MINUTE);
    c.clear(Calendar.SECOND);
    if (c.get(Calendar.HOUR_OF_DAY) > 17) {
        c.add(Calendar.DATE, 1);
    }
    c.set(Calendar.HOUR_OF_DAY, 17);
    Date firstTime = c.getTime();
    new Timer().scheduleAtFixedRate(task, firstTime, 24 * 3600 * 1000);

好吧,更合適的答案是Grooveek的答案,但是作為替代

import java.awt.Toolkit;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class demo 
{
  Toolkit toolkit;
  Timer timer;
  public demo()
  {
    toolkit = Toolkit.getDefaultToolkit();
    timer = new Timer();
    timer.schedule(new scheduleDailyTask(), 0, //initial delay
        1 * 1000); //subsequent rate
  }
  class scheduleDailyTask extends TimerTask 
  {
    public void run() 
    {
      Date date = new Date();
      if(date.getHours()==5 && date.getMinutes()==0 && date.getSeconds()==0)
      {
          System.out.println("its 5 O clock");
          System.out.println("run the daily schedule method now");
      }
    }
  }
  public static void main(String args[]) {
    new demo();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM