JDK timer

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

 

你可能感兴趣的:(java,jdk,schedule,code,timer)