Java Timer、TimerTask、Reminder 類教程帶示例

已發表: 2021-02-04
Java Timer、TimerTask、Reminder 類教程帶示例

java.util.Timer是一個實用程序類,可用於安排線程在未來某個時間執行。 Java Timer 類可用於安排任務運行一次或定期運行。

java.util.TimerTask是一個實現 Runnable 接口的抽像類,我們需要擴展這個類來創建我們自己的 TimerTask,可以使用java Timer類進行調度。

Timer 類是線程安全的,多個線程可以共享一個 Timer 對象而無需外部同步。 Timer 類使用 java.util.TaskQueue 以給定的定期間隔添加任務,並且在任何時候都只能有一個線程運行 TimerTask,例如,如果您要創建一個 Timer 以每 10 秒運行一次但單線程執行需要 20 秒,然後 Timer 對象將繼續向隊列添加任務,一旦一個線程完成,它將通知隊列,另一個線程將開始執行。

Java 定時器類

Timer 類使用對像等待和通知方法來安排任務。 TimerTask 是一個abstract class ,我們繼承它來提供具體的實現。 TimerTask 類implementsRunnable interface ,因此它是一個線程,因此您的 TimerTask 實現也是一個線程。

非常簡單的 Timer 和 TimerTask 示例:任務在5 seconds後執行。

結果:

這個簡單的程序說明了實現和調度要由計時器線程執行的任務的以下基本部分:

  • 實現TimerTask的自定義子類。 run方法包含執行任務的代碼。 在此示例中,子類名為 CrunchifyReminder。
  • 通過實例​​化Timer類來創建線程。
  • 實例化TimerTask對象 ( new CrunchifyReminder() )。
  • 安排定時器任務執行。

如何重複執行此 TimerTask?

結果:

默認情況下,只要計時器線程在運行,程序就會一直運行。 您可以通過四種方式終止計時器線程:

  • 在計時器上調用cancel 。 您可以從程序中的任何位置執行此操作,例如從計時器任務的run方法。
  • 通過像這樣創建計時器,使計時器的線程成為“守護進程”: new Timer(true) 。 如果程序中剩下的唯一線程是守護線程,則程序退出。
  • 在所有計時器的計劃任務執行完畢後,刪除對Timer對象的所有引用。 最終,計時器的線程將終止。
  • 調用System.exit方法,使整個程序(及其所有線程)退出。