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(); } }