Timer 是用來負責調度定時任務的類。 需要接受一個TimerTask 的對象,然後去執行TimerTask中定義的代碼。
比如:要從今天的14:58分開始,然後每隔2秒中執行一次。
先定義 TimerTask的實例:TimerTaskTest 繼承該類,並實現run 方法:
import java.util.Date;
import java.util.TimerTask;
public class TimerTaskTest extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("invoke:" + new Date().toLocaleString());
}
}
然後定義調度類,讓其在14:58開始,每個三秒鐘執行一次:
import java.util.Calendar;
import java.util.Timer;
public class Test {
public static void main(String[] args) {
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 14);
today.set(Calendar.MINUTE, 58);
today.set(Calendar.SECOND, 0);
Timer timer = new Timer();
timer.schedule(new TimerTaskTest(), today.getTime(), 3000);
}
}
正確執行!
若將schedule方法的最後一個參數去掉,則該方法變爲 從定義的時間開始,每天均在該時間點 執行TimerTask中定義的代碼。
比如:
import java.util.Calendar;
import java.util.Timer;
public class Test {
public static void main(String[] args) {
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 15);
today.set(Calendar.MINUTE, 06);
today.set(Calendar.SECOND, 00);
System.err.println(today.getTime().toLocaleString());
Timer timer = new Timer();
timer.schedule(new TimerTaskTest(), today.getTime());
}
}
則將會在每天的15:06 執行TimerTaskTest中的代碼。
若當前時間已經過了規定的時間,則立即執行一次。