JDK 1.8 中的 Timer 類

1 Class Timer

定時器 Timer 類位於java.util包,並且繼承自根類 Object,具體爲:

  • public class Timer extends Object

線程調度任務是可以在後臺線程中執行的能力。任務可以執行一次,也可以定期重複執行。

與每個 Timer 對象相對應的是一個單獨的後臺線程,它用於順序執行所有定時器的任務。定時器任務應該很快完成。如果一個計時器任務花費了大量的時間來完成,它會“影響”計時器的任務執行線程。同時,反過來,延遲執行子序列的任務,當(或如果)延遲任務最終完成的時候,這些任務可能會“串聯”並迅速執行。

在對 Timer 對象的最後一次實時引用消失後,所有未完成的任務都已完成執行,計時器任務的執行線程將優雅地終止(併成爲垃圾收集的對象)。然而,垃圾回收器可能在任意長的時間內回收垃圾對象(換言之,不知道垃圾回收器什麼時候會執行,或者會不會執行,例如,如果內存空間足夠的話,垃圾回收器可能一直不執行)。默認情況下,任務執行線程不作爲守護線程運行,因此它能夠使應用程序終止。如果我們想要快速終止定時器的任務執行線程,我們應該調用計時器的cancel方法。

如果定時器的任務執行線程意外終止,例如,因爲它調用了stop方法,那麼在定時器上調度任務的任何進一步的嘗試都將會產生一個 IllegalStateException,就像定時器的cancel方法被調用一樣。

這個類(Timer)是線程安全的:多個線程可以共享一個 Timer 對象,而不需要外部同步。

這個類(Timer)不提供實時保證:使用Object.wait(long)方法是調度任務。

Java 5.0 引入了java.util.concurrent包,其中一個併發工具是 ScheduledThreadPoolExecutor,它用於以給定速率或延遲重複執行任務的線程池。這實際上是一個更靈活的替代 Timer / TimerTask 組合,因爲它允許多個服務線程,接受各種時間單位,並且不需要子類 TimerTask(僅實現 Runnable 接口)。在一個線程上配置 ScheduledThreadPoolExecutor 等同於使用 Timer 類。

  • 實現注意事項:這個類可以擴展到大量併發調度的任務(數千應該沒有問題)。在內部,它使用二進制堆表示其任務隊列,因此計劃任務的成本爲O(logn),其中n爲併發計劃調度任務的數量。
  • 實現注意事項:所有構造函數啓動定時器線程。

起始版本:1.3

2 概要

2.1 構造方法概要

  • Timer():創建一個新的定時器。
  • Timer(boolean isDaemon):創建一個新的定時器,其關聯線程可以作爲守護進程運行。
  • Timer(String name):創建一個新的定時器,其關聯線程具有指定的名稱。
  • Timer(String name, boolean isDaemon):創建一個新的定時器,其關聯線程具有指定的名稱,並且可以指定其關聯進程是否作爲守護進程運行。

2.1 方法概要

  • void cancel():終止此定時器,丟棄當前任何的調度任務。
  • int purge():從當前的定時器任務隊列中,移除所有已經取消的任務。
  • void schedule(TimerTask task, Date time):在指定的時間點,執行指定的任務。
  • void schedule(TimerTask task, Date firstTime, Long period):從指定的時間點開始執行指定的任務,並以固定的時間週期重複執行指定的任務。
  • void schedule(TimerTask task, Long delay):在經過指定的延遲時間之後,執行指定的任務。
  • void schedule(TimerTask task, Long delay, Long period):在經過指定的延遲時間之後,執行指定的任務,並以固定的時間週期重複執行指定的任務。
  • void scheduleAtFixedRate(TimerTask task, Date firstTime, Long period):從指定的時間點開始執行指定的任務,並以固定的時間週期重複執行指定的任務。
  • void scheduleAtFixedRate(TimerTask task, Long delay, Long period):在經過指定的延遲時間之後,執行指定的任務,並以固定的時間週期重複執行指定的任務。

轉載網址:https://blog.csdn.net/qq_35246620/article/details/77898295

我遇到的問題是Timer的構造方法傳入參數false和true的區別,歡迎留言簡答

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章