Java多線程編程要點 (二)

四、 Timer 和 Timer Task 的使用html

Timer 是一種定時器工具,用來在一個後臺線程計劃執行指定任務,這些任務能夠被執行一次,也能夠被按期執行。每一個 Timer 對象對應一個後臺線程,順序地執行全部計時器任務。若是完成某個計時器任務的時間太長,那麼它會「獨佔」計時器的任務執行線程,從而可能延遲後續任務的執行。對 Timer 對象最後的引用完成而且全部未處理的任務都已執行完成後,計時器的任務執行線程會正常終止(而且成爲垃圾回收的對象)。TimerTask是一個抽象類,實現了Runable接口,它的子類表明一個能夠被Timer計劃的任務。java

1) 一個簡單的Demo,讓你們對Timer、TimerTask的使用有感性的認識。api

2) Timer和TimerTask的經常使用api函數說明函數

這裏強調Timer類的schedule和scheduleAtFixedRate的區別。schedule和scheduleAtFixedRate的區別在於,schedule以固定的相對時間間隔執行,若是某一次執行被延時了,日後的執行的執行時間也會相對延時;而scheduleAtFixedRate是以絕對的時間間隔執行,若是某一次執行被延時,它的後一次執行的延時將會縮短(scheduleAtFixedRate會把已通過去的時間也做爲週期執行)。schedule注重的是時間間隔的穩定,而scheduleAtFixedRate注重的是執行頻率的穩定。工具

3) Timer的終止spa

默認狀況下,只要一個程序的timer線程在運行,那麼這個程序就會保持運行。固然,你能夠經過如下四種方法終止一個timer線程:線程

a)調用timer的cancle方法。你能夠從程序的任何地方調用此方法,甚至在一個timer task的run方法裏;htm

b)讓timer線程成爲一個daemon線程(能夠在建立timer時使用new Timer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行;對象

c)當timer相關的全部task執行完畢之後,刪除全部此timer對象的引用(置成null),這樣timer線程也會終止;blog

d)調用System.exit方法,使整個程序(全部線程)終止。

總結:Timer和TimerTask能夠簡單理解爲Timer定時器在觸發TimerTask任務調用,一般用schedule和scheduleAtFixedRate方法來調用timertask任務,cancle來終止任務調用。Timer簡單易用,比較適合提供輕量級的計時器功能,可是對時效性很強的任務調度請用其它方法來實現(正如javadoc所述」Timer does not offer real-time guarantees: it schedules tasks using the Object.wait(long) method」)。

原文地址:http://shuaihong.blog.chinabyte.com/2010/03/24/33/

閱讀全文
類別:Java 查看評論

相關文章
相關標籤/搜索