Java 带有时间、延迟和周期的 TimerTask
Java TimerTask with time, delay and period
我想在 9:00 AM 到 10:00 AM 之间安排我的程序 运行,它应该在指定的时间间隔内每 10 秒 运行。我正在使用方法 scheduleAtFixedRate()
。此方法允许 delay, period 或 firstime, period。但我需要第一次,延迟,期间。
这是我的代码。
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();
}
}
请注意,当您将它与
结合使用时,您当然可以使用另一种 "stacking" 方法
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);
}
}
我想在 9:00 AM 到 10:00 AM 之间安排我的程序 运行,它应该在指定的时间间隔内每 10 秒 运行。我正在使用方法 scheduleAtFixedRate()
。此方法允许 delay, period 或 firstime, period。但我需要第一次,延迟,期间。
这是我的代码。
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();
}
}
请注意,当您将它与
结合使用时,您当然可以使用另一种 "stacking" 方法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);
}
}