1.java.util.Timer.schedule(TimerTask task, long delay):多长时间(毫秒)后执行任务
2.java.util.Timer.schedule(TimerTask task, Date time):设定某个时间执行任务
3.java.util.Timer.schedule(TimerTask task, long delay,longperiod):delay时间后开始执行任务,并每隔period时间调用任务一次。
4.java.util.Timer.schedule(TimerTask task, Date firstTime, long period):第一次在指定firstTime时间点执行任务,之后每隔period时间调用任务一次。
5.java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period):delay时间后开始执行任务,并每隔period时间调用任务一次。
6.java.util.Timer.scheduleAtFixedRate(TimerTask task, Date firstTime, long period):第一次在指定firstTime时间点执行任务,之后每隔period时间调用任务一次。
7.java.util.Timer.cancel():终止该Timer
8.java.util.TimerTask.cancel():终止该TimerTask
schedule与scheduleAtFixedRate的主要区别是
1. 不管执行的任务耗时多久,schedule总会按照指定的时间间隔去执行
2. 对于scheduleAtFixedRate,如果前一次任务时间超过了period(时间间隔),下一次任务将提前执行以保证2次任务执行的执行频率达到指定period
timer.DefaultTimerTask
package timer;
import java.util.Random;
import java.util.TimerTask;
public class DefaultTimerTask extends TimerTask{
private long count = 1;
private long prevInvokeTime = 0;
@Override
public void run() {
long currentInvokeTime = System.currentTimeMillis();
if(prevInvokeTime>0){
System.out.println("invoke this execution after ["+(currentInvokeTime-prevInvokeTime)+"]");
}
try {
Thread.sleep(new Random().nextInt(2000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("execution count is ["+count+++"]");
prevInvokeTime = currentInvokeTime;
}
}
timer.MyTimer.java
package timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer {
public static void executionOnce(){
Timer timer = new Timer();
TimerTask task = new DefaultTimerTask();
timer.schedule(task, 1000);
}
public static void executionAtSpecifiedTime(){
Timer timer = new Timer();
TimerTask task = new DefaultTimerTask();
timer.schedule(task, new Date());
}
public static void executionInterval(){
Timer timer = new Timer();
TimerTask task = new DefaultTimerTask();
timer.schedule(task, 1000,1000);
}
public static void executionIntervalAtSpecifiedTime(){
Timer timer = new Timer();
TimerTask task = new DefaultTimerTask();
timer.schedule(task, new Date(),1000);
}
public static void executionFixedInterval(){
Timer timer = new Timer();
TimerTask task = new DefaultTimerTask();
timer.scheduleAtFixedRate(task, 1000, 1000);
}
public static void executionFixedIntervalSpecifiedTime(){
Timer timer = new Timer();
TimerTask task = new DefaultTimerTask();
timer.scheduleAtFixedRate(task, new Date(), 1000);
}
public static void main(String[] args) {
// executionOnce();
// executionAtSpecifiedTime();
// executionInterval();
// executionIntervalAtSpecifiedTime();
// executionFixedInterval();
executionFixedIntervalSpecifiedTime();
}
}