[英]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.