HOWTO · Java
Java 定時器
本文介紹如何使用 Java 定時器
本頁內容
Timer 是 Java 程式語言中的一項服務,允許使用者安排未來的事件。這些未來事件可以是一次,也可以定期重複。我們可以使用觸發器來啟動未來的事件。
在 Java 中使用 Timer 安排一次性任務
import java.util.Timer;
import java.util.TimerTask;
public class StopWatch {
Timer timer;
public StopWatch(int seconds) {
timer = new Timer();
timer.schedule(new StopTask(), seconds * 1000);
}
public static void main(String[] args) {
new StopWatch(10);
System.out.println("StopWatch Started.");
}
class StopTask extends TimerTask {
public void run() {
System.out.println("Time Up!");
timer.cancel();
}
}
}
在上面的程式碼塊中,我們建立了一個名為 StopWatch 類的公共類。它有它的公共建構函式,它需要以秒為單位的時間。在建構函式塊中,建立了一個計時器例項。在計時器例項上,schedule 方法被呼叫。此方法任務是在給定的時間量安排特定事件。它需要兩個引數 TimerTask 例項和延遲。我們以毫秒為單位定義延遲。當定義的給定延遲無效時,該方法丟擲 IllegalArgumentException,當提供的任務已被安排或取消時,IllegalArgumentException。當提供的任務例項為空時,它也會丟擲 NullPointerException。
在建構函式的正下方,我們有 main 方法,從那裡開始實際執行。它建立了一個具有定義延遲的 StopWatch 類的新例項,它在內部執行建構函式塊中的語句。
在 main 方法下面,定義了一個名為 StopTask 的內部類,它擴充套件了一個 TimerTask 抽象類。TimerTask 是一個抽象類,它有一個稱為 run 方法的抽象方法。該方法需要在 StopTask 類中被覆蓋,如果沒有被覆蓋,該類本身應該成為抽象的。現在在 run 方法中,我們已經使用 cancel 方法停止了計時器。該方法丟棄任何當前計劃的任務並終止計時器任務。
下面是上述程式碼塊的輸出。當遇到 schedule 方法中的延遲時,將列印第二行。
StopWatch Started.
Time Up!
在 Java 中安排重複計時器
我們將修改上面的程式碼來建立一個重複的計時器。重複計時器以固定的時間間隔重複執行。
在下面的程式碼塊中,我們建立了一個 Timer 例項。例項變數的用途是呼叫方法 scheduleAtFixedRate 方法,該方法安排未來的事件。該方法有多種實現方式。我們使用的那個需要三個引數。首先,TimerTask 例項包含與我們希望在未來執行的操作相關的語句。接下來,delay 變數定義了任務或事件執行所花費的時間。最後是定義事件連續呼叫之間的時間的 period。此方法引發異常,包括 NullPointerException IllegalArgument 和 IllegalState 異常。
import java.util.Timer;
import java.util.TimerTask;
public class RepeatedTimer {
public static void main(String[] args) {
Timer timer = new Timer();
System.out.println("Stop Watch Started.");
timer.scheduleAtFixedRate(new RepeatedTask(), 500, 1000);
}
static class RepeatedTask extends TimerTask {
public void run() {
System.out.println("Running!");
}
}
}
以下是預定的未來事件的永無止境的結果。
Running!
Running!
Running!
Running!