(原创)Java定时器:java.util.Timer

java.util.Timer可以在程序中定时实现任务,Timer需要继承java.util.TimerTask并实现类中的 run() 方法,实际上TimerTask是一个抽象类,他继承了java.lang.Runnable接口。

package yehaizi.util.timers;

import java.util.TimerTask;
public class MyTimerTask extends TimerTask {

	public MyTimerTask(){
		super(); 
	}

	public void run() {
		// TODO Auto-generated method stub
		System.out.println("定时器Run......");    
	}
}

 

Timer类中 schedule方法与scheduleAtFixedRate方法启动定时执行。下面看个简单的实例:

 

package com.util.timers;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import com.util.timers.MyTimerTask;
public class TimerManager {
 
	private Timer t=null;
	
	public TimerManager(){
		
	}
	//根据给定的时间启动定时器,如果给定的时间小于当前时间,则启动定时器执行,并只执行一次任务。
	public void time(TimerTask timer,Date date){
		t=new Timer();
		t.schedule(timer,date);
	}
	
	//销毁定时器
	public void destoryTimer(){
		t.cancel();
	}
	
	public static void main(String arges[]){
		
		TimerManager tm=new TimerManager();
		
		MyTimerTask mk=new MyTimerTask();
		
		tm.time(mk, new Date());
		
		tm.destoryTimer();
		
	}
}

 

 

程序输出的结果是:定时器Run...... 并且任务只执行一次。

 

Timer类schedule方法或者scheduleAtFixedRate方法启动定时执行,schedule重载了四个版本,scheduleAtFixedRate重载了两个。

 

package com.util.timers;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import com.util.timers.MyTimerTask;
public class TimerManager {
 
	private Timer t=null;
	
	public TimerManager(){
		
	}
	
	//会在指定的时间点执行一次任务。
	public void time(TimerTask task,long delay){
		t=new Timer();
        t.schedule(task,delay);
		
	}
	//根据给定的时间启动定时器,如果给定的时间小于当前时间,则启动定时器执行,并只执行一次任务。
	public void time(TimerTask timer,Date date){
		t=new Timer();
		t.schedule(timer,date);
	}
	

	
	//在指定的时间后执行任务,并且在设定的周期定时执行任务。arg0未给定周期,单位毫秒
	public void time(TimerTask timer,Date date,long arg0){
		t=new Timer();
		t.schedule(timer, date,arg0);
	}
	
	//会在指定的时间点执行一次任务,并且在设定的周期定时执行任务
	public void time(TimerTask task,long delay,long period){
		t=new Timer();
		t.schedule(task, delay,period);
	}
	
	//在指定的时间点执行任务,然后从该时间点开始.
	//在设定的周期定时执行任务。
	//如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务。
	//比如程序1秒执行一次,延迟2秒后执行,但是因为垃圾收集延迟了2.5秒,那么下次任务会在1.5秒时执行
	//抢回应上次延迟多出的0.5秒
	public void timeAtFixedRate(TimerTask task,long delay,long period){
		t=new Timer();
		t.scheduleAtFixedRate(task,delay,period);
	}
	
	//在指定的时间执行任务,然后从该时间点开始.
	//在设定的周期定时执行任务。
	//如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务。
	//比如程序1秒执行一次,延迟2秒后执行,但是因为垃圾收集延迟了2.5秒,那么下次任务会在1.5秒时执行
	//抢回应上次延迟多出的0.5秒
	public void timeAtFixedRate(TimerTask task,Date delay,long period){
		t=new Timer();
		t.scheduleAtFixedRate(task,delay,period);
	}
	
	//销毁定时器
	public void destoryTimer(){
		t.cancel();
	}
	
	public static void main(String arges[]){
		
		TimerManager tm=new TimerManager();
		
		MyTimerTask mk=new MyTimerTask();
		
		tm.time(mk, new Date());
		
		tm.destoryTimer();
		
	}
}

 

 


 

你可能感兴趣的:(java)