java 調度器 Timer

首先創建一個任務執行類,繼承TimerTask:MyTimerTask,重寫run方法在run

裏面執行自己額業務邏輯

import java.util.TimerTask;

public class MyTimerTask extends TimerTask{
	private String name;
	public MyTimerTask(String inputName){
		name = inputName;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
//		打印當前name的內容
		System.out.println("current exec name is "+name);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	} 
}

然後創建一個Timer定時器:MyTimer

import java.util.Timer;

public class MyTimer {
	public static void main(String []args){
//		創建一個Timer實例
		Timer timer = new Timer();
//		創建一個MyTimerTask實例
		MyTimerTask myTimerTask = new MyTimerTask("NO.1");
//		通過timer 定時頂頻率調用myTimerTask的業務
//		即第一次執行是在當前時間的兩秒鐘之後,之後就每隔一秒執行一次
		timer.schedule(myTimerTask, 2000L, 1000L);
	}
}

定時器解綁就是調用Timer的幾個是列方法:

timer.schedule(task, time);---時間等於或者晚於這個時間的時候執行task,並且只執行一次。
timer.schedule(task, delay);---延遲delay毫秒數之後執行task
timer.schedule(task, delay, period);---延遲delay毫秒後執行第一次,以後則每隔period毫秒執行一次task
timer.schedule(task, firstTime, period);--第一次執行是在firstTime,以後會每隔period毫秒的時間段執行一次
timer.scheduleAtFixedRate(task, delay, period);---看參數能想到
timer.scheduleAtFixedRate(task, firstTime, period);---看參數能想到用法


至於後兩個方法的特殊點:

scheduleAtFixedRate
可以用過去的時間爲參數:如當前時間11:17,定時開始時間是11:10,每隔3分鐘執行一次,則程序會立即執行三次(11:10,11:13,11:16),而下次執行時間是11:19。

如果使用schedule方法則是會立即執行一次,並且下次執行時間是在11:20.schedule方法不會去計算過去的時間。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章