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 IllegalArgumentIllegalState 異常。

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!