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的區別,歡迎留言簡答