import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* Description: Java定时器的使用
* @author MatthewXu
* @date Jun 26, 2019
*/
public class TimerDemo {
/**
* 指定task在指定时间time执行,只执行一次。
* @param task
* @param time
*/
public static void scheduleWithTime(TimerTask task, Date time) {
Timer timer = new Timer();
timer.schedule(task, time);
}
/**
* 指定task在当前时间延迟delay后执行,执行一次。
* @param task
* @param delay
*/
public static void scheduleWithDelay(TimerTask task, long delay) {
Timer timer = new Timer();
timer.schedule(task, delay);
}
/**
* 指定task在当前时间延迟delay后执行,并且每隔period执行一次。
* @param task
* @param delay
* @param period
*/
public static void scheduleWithDelayAndPeriod(TimerTask task, long delay, long period) {
Timer timer = new Timer();
timer.schedule(task, delay, period);
}
/**
* 指定task在指定时间firstTime执行,并且每隔period执行一次。
* @param task
* @param firstTime
* @param period
*/
public static void scheduleWithFirstTimeAndPeriod(TimerTask task, Date firstTime, long period){
Timer timer = new Timer();
timer.schedule(task, firstTime, period);
}
/**
* 指定task在当前时间延迟delay后执行,并且每隔period执行一次。
* @param task
* @param delay
* @param period
*/
public static void scheduleAtFixedRateWithDelayAndPeriod(TimerTask task, long delay, long period){
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, delay, period);
}
/**
* 指定task在指定时间firstTime执行,并且每隔period执行一次。
* 在执行任务时,如果指定的计划执行时间scheduledExecutionTime<=
* systemCurrentTime,则task会首先按执行一次;然后按照执行时间、系统当前时间和period参数计算出过期该执行的次数,计算按照:
* (systemCurrentTime-scheduledExecutionTime)/period,再次执行计算出的次数;最后按period参数固定重复执行。
* 换句话说,就是scheduleAtFixedRate和schedule的区别在于;
* 前者会把之前欠着的任务一次性补偿,然后按照既定的时间和频率继续执行。而后者就是按照原定的时间和频率执行。
* @param task
* @param firstTime
* @param period
*/
public static void scheduleAtFixedRateWithFirstTimeAndPeriod(TimerTask task, Date firstTime, long period){
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, firstTime, period);
}
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("TimerTask doing...");
}
};
long delay = 10 * 1000;
long period = 10 * 1000;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,00);
calendar.set(Calendar.MINUTE,00);
calendar.set(Calendar.SECOND, 0);
Date firstTime = calendar.getTime();
Date time = new Date();
scheduleWithTime(task, time);
scheduleWithDelay(task, delay);
scheduleWithDelayAndPeriod(task, delay, period);
scheduleWithFirstTimeAndPeriod(task, firstTime, period);
scheduleAtFixedRateWithDelayAndPeriod(task, delay, period);
scheduleAtFixedRateWithFirstTimeAndPeriod(task, firstTime, period);
}
}
Java定时器Timer的使用
最新推荐文章于 2021-06-19 17:10:47 发布