[英]Java TimerTask with time, delay and period
我想安排程序在9:00 AM到10:00 AM之間運行,並且應在指定間隔內每10秒運行一次。 我正在使用scheduleAtFixedRate()
方法。 此方法允許延遲,周期或首選周期。 但是我需要第一次,延遲,時間。
這是我的代碼。
import java.util.*;
public class TimerDemo extends TimerTask
{
public TimerDemo()
{
Timer timer = new Timer();
Calendar date = Calendar.getInstance();
date.set(Calendar.HOUR, 9);
date.set(Calendar.MINUTE, 0);
timer.scheduleAtFixedRate(this, new Date(), 2000);
}
public void run()
{
System.out.println("This is the new Task");
}
public static void main (String args[])
{
new TimerDemo();
}
}
有人可以幫我這個忙嗎?
您可以將它們堆疊在一起,即,首先使用以下命令啟動一些虛擬任務
void java.util.Timer.schedule(TimerTask task, Date time)
從這個虛擬任務中,您可以使用以下命令調用主任務
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
這樣做應該可以讓您第一次(通過虛擬任務)進行控制,並可以使用主任務控制延遲和周期。 看起來可能像這樣...
package sorting;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo
{
static class StarterTask extends TimerTask {
@Override
public void run() {
System.out.println("Dummy task invoked");
Timer timer = new Timer();
timer.schedule(new MainTask(), 10*1000, 60*60*1000);
}
}
static class MainTask extends TimerTask {
@Override
public void run() {
System.out.println("Main task invoked");
}
}
public TimerDemo()
{
Timer timer = new Timer();
Calendar date = Calendar.getInstance();
date.set(Calendar.HOUR, 9);
date.set(Calendar.MINUTE, 0);
timer.schedule(new StarterTask(), date.getTime());
}
public static void main (String args[])
{
new TimerDemo();
}
}
請注意,當您將其與
cancel()
功能
我已經針對此問題改進了解決方案的版本。 這將根據輸入的開始時間和結束時間運行您的任務。 我用喬達時間。 您可以使用24小時格式的時間。
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import org.joda.time.DateTime;
public class NewTimerDemo extends TimerTask
{
static Timer timer = new Timer();
static String startTime = "12:28";
static String endTime = "12:30";
@Override
public void run()
{
System.out.println("Running your Task");
DateTime dt = new DateTime().withTime(
Integer.parseInt(endTime.split(":")[0]),
Integer.parseInt(endTime.split(":")[1]), 0, 0);
if(!dt.isAfterNow())
{
System.out.println("Here to cancel");
timer.cancel();
}
}
public static void main(String args[])
{
DateTime dt = new DateTime().withTime(
Integer.parseInt(startTime.split(":")[0]),
Integer.parseInt(startTime.split(":")[1]), 0, 0);
System.out.println(dt);
Date date = dt.toDate();
timer.schedule(new NewTimerDemo(), date, 5*1000);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.