第一种方法: 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; public class TimeTest { public static void main(String[] args) { timer1(); } public static void timer1(){ Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("设定指定任务task在指定延迟delay后执行" ); } }, 2000 ); } 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 ); } 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(); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("设定指定任务task在指定时间time执行" ); } }, time); } 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(); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println(new Date()+ " 安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行" ); } }, time,2000 ); } 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 ); } 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(); 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 )。
转载地址:http://blog.csdn.net/qq_32786873/article/details/53005976