今天工作需要用到java的定时器,于是做了个例子,发现一个不是很明白的问题,不知道这是不是正常情况:
timer的几个schedule方法执行时,如果时间设为已过时间,几个方法中指定时间的也都会执行。尤其是指定时间重复执行的方法,指定时间已过,但还会执行。
例子代码如下:
package timer;
import java.util.Calendar;
import java.text.ParseException;
import java.util.Timer;
import java.util.Date;
public class TestTimer {
public static void testTimer()
{
Timer timer = new Timer();
Calendar c = Calendar.getInstance();
c.add(Calendar.MINUTE, -1);//将时间设为已过时间
Date date = c.getTime();
System.out.println(date.toLocaleString());
timer.schedule(new TestTimerTask("安排在指定的时间执行指定的任务11"), date);
timer.schedule(new TestTimerTask("安排在指定延迟后执行指定的任务22"), 60*1000l);
timer.schedule(new TestTimerTask("安排指定的任务在指定的时间开始进行重复的固定延迟执行33"), date, 60*1000l);
timer.schedule(new TestTimerTask("安排指定的任务从指定的延迟后开始进行重复的固定延迟执行44"), 60*1000l, 60*1000l);
timer.scheduleAtFixedRate(new TestTimerTask("安排指定的任务在指定的时间开始进行重复的固定速率执行55"), date, 120*1000l);
timer.scheduleAtFixedRate(new TestTimerTask("安排指定的任务在指定的延迟后开始进行重复的固定速率执行66"), 60*1000l, 120*1000l);
}
public static void main(String[] args)
{
testTimer();
}
}
package timer;
import java.util.TimerTask;
public class TestTimerTask extends TimerTask{
private String msg ;
public TestTimerTask(String msg)
{
this.msg = msg;
}
public void run()
{
System.out.println("--->>"+msg);
}
}
timer的几个schedule方法执行时,如果时间设为已过时间,几个方法中指定时间的也都会执行。尤其是指定时间重复执行的方法,指定时间已过,但还会执行。
例子代码如下:
package timer;
import java.util.Calendar;
import java.text.ParseException;
import java.util.Timer;
import java.util.Date;
public class TestTimer {
public static void testTimer()
{
Timer timer = new Timer();
Calendar c = Calendar.getInstance();
c.add(Calendar.MINUTE, -1);//将时间设为已过时间
Date date = c.getTime();
System.out.println(date.toLocaleString());
timer.schedule(new TestTimerTask("安排在指定的时间执行指定的任务11"), date);
timer.schedule(new TestTimerTask("安排在指定延迟后执行指定的任务22"), 60*1000l);
timer.schedule(new TestTimerTask("安排指定的任务在指定的时间开始进行重复的固定延迟执行33"), date, 60*1000l);
timer.schedule(new TestTimerTask("安排指定的任务从指定的延迟后开始进行重复的固定延迟执行44"), 60*1000l, 60*1000l);
timer.scheduleAtFixedRate(new TestTimerTask("安排指定的任务在指定的时间开始进行重复的固定速率执行55"), date, 120*1000l);
timer.scheduleAtFixedRate(new TestTimerTask("安排指定的任务在指定的延迟后开始进行重复的固定速率执行66"), 60*1000l, 120*1000l);
}
public static void main(String[] args)
{
testTimer();
}
}
package timer;
import java.util.TimerTask;
public class TestTimerTask extends TimerTask{
private String msg ;
public TestTimerTask(String msg)
{
this.msg = msg;
}
public void run()
{
System.out.println("--->>"+msg);
}
}