Java 定時器

Rashmi Patidar 2023年1月30日 2021年7月1日
  1. 在 Java 中使用 Timer 安排一次性任務
  2. 在 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!
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

相關文章 - Java Timer