第一种方法:schedule(TimerTask task, long delay) 设定指定任务task在指定延迟delay后执行
第二种方法:schedule(TimerTask task, long delay, long period) 设定指定任务task在指定延迟delay后进行固定频率peroid的执行
第三种方法:schedule(TimerTask task,Date time) 设定指定任务task在指定时间time执行
第四种方法:schedule(TimerTask task,Date firstTime,long period) 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
第五种方法:scheduleAtFixedRate(TimerTask task, long delay, long period) 设定指定任务task在指定延迟delay后进行固定频率peroid的执行
第六种方法:scheduleAtFixedRate(TimerTask task,Date firstTime,long period) 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
package test;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author Solin
*
*/
public class TimeTest {
public static void main(String[] args) {
timer1();
}
/**
* 第一种方法:设定指定任务task在指定延迟delay后执行
* schedule(TimerTask task, long delay)
*/
public static void timer1(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("设定指定任务task在指定延迟delay后执行");
}
}, 2000);
}
/**
* 第二种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行
* schedule(TimerTask task, long delay, long period)
*/
public static void timer2(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 设定指定任务task在指定延迟delay后进行固定频率peroid的执行");
}
}, 1000, 2000);
}
/**
* 第三种方法:设定指定任务task在指定时间time执行
* schedule(TimerTask task,Date time)
*/
public static void timer3(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("设定指定任务task在指定时间time执行");
}
}, time);
}
/**
* 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
* schedule(TimerTask task,Date firstTime,long period)
*/
public static void timer4(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,2000);
}
/**
* 第五种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行
* scheduleAtFixedRate(TimerTask task, long delay, long period)
*/
public static void timer5(){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 设定指定任务task在指定延迟delay后进行固定频率peroid的执行");
}
}, 1000, 2000);
}
/**
* 第六种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行
* scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
*/
public static void timer6(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10); // 控制时
calendar.set(Calendar.MINUTE, 42); // 控制分
calendar.set(Calendar.SECOND,55); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,2000);
}
}
schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。
比如:
public static void timer6(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11); // 控制时
calendar.set(Calendar.MINUTE, 20); // 控制分
calendar.set(Calendar.SECOND,00); // 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的11:20:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date()+" 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行");
}
}, time,60*1000);
}
间隔时间是1分钟,指定开始时间是今天的 11:20:00,如果我在11:24:30执行这个程序,那么会立刻打印5次
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:20:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:21:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:22:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:23:00
Wed Nov 02 11:24:30 CST 2016 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行 //11:24:00
并且注意,下一次执行是在11:25:00 而不是 11:25:30。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。
但是上面如果用schedule方法,间隔时间是1分钟,指定开始时间今天11:20:00,那么在11:24:30执行这个程序,则立即执行程序一次。并且下一次的执行时间是11:25:30,而不是从11:20:00开始算的周期(11:25:00)。