Java 多線程編程核心技術5—定時器Timer
- Timer類的主要做用就是設置計劃任務,但封裝任務的類倒是TimerTask類,執行計劃任務的代碼要放入TimerTask的子類中,由於TimerTask是一個抽象類。
- 建立1個Timer就是啓動一個新的線程,那麼這個新啓動的線程並非守護線程,一直在運行。
- 若是執行任務的時間早於當前時間,則當即執行task任務。
- TimerTask是以隊列的方式一個一個被順序性地執行,因此執行的時間有可能和預期的時間不一致,由於的任務有可能消耗的時間比較長,則後面的任務運行的時間也被延後。
- 在使用一個Timer狀況下,Task是放入隊列的,得一個一個運行。
- TimerTask類中的cancel()方法的做用是將自身從任務隊列中進行清除。其餘任務不受影響。
- Timer類中的cancel()方法做用是將任務隊列中所有的任務進行清空。
- 所有任務都被清除,而且進程被銷燬。
- Timer類中的cancel()方法有時並不必定會中止計劃任務,而是正常執行。緣由是Timer類中的cancel()方法有時並無搶到queue鎖,則讓TimerTask類中的任務正常執行。
- 方法schedule和方法scheduleAtFixedRate都會按順序執行,因此不要考慮非線程安全的狀況,主要區別在於有沒有追趕特性。
歡迎關注本站公眾號,獲取更多信息