Java多線程編程要點(二)------chuangxin01 __演算法

來源:互聯網
上載者:User

4、 Timer 和 Timer Task 的使用

Timer 是一種定時器工具,用來在一個後台線程計劃執行指定任務,這些任務可以被執行一次,也可以被定期執行。每個 Timer 對象對應一個後台線程,順序地執行所有計時器任務。如果完成某個計時器任務的時間太長,那麼它會“獨佔”計時器的任務執行線程,從而可能延遲後續任務的執行。對 Timer 對象最後的引用完成並且所有未處理的任務都已執行完成後,計時器的任務執行線程會正常終止(並且成為記憶體回收的對象)。TimerTask是一個抽象類別,實現了Runable介面,它的子類代表一個可以被Timer計劃的任務。

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

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

這裡強調Timer類的schedule和scheduleAtFixedRate的區別。schedule和scheduleAtFixedRate的區別在於,schedule以固定的相對時間間隔執行,如果某一次執行被延時了,往後的執行的執行時間也會相對延時;而scheduleAtFixedRate是以絕對的時間間隔執行,如果某一次執行被延時,它的後一次執行的延時將會縮短(scheduleAtFixedRate會把已經過去的時間也作為周期執行)。schedule注重的是時間間隔的穩定,而scheduleAtFixedRate注重的是執行頻率的穩定。

3) Timer的終止

預設情況下,只要一個程式的timer線程在運行,那麼這個程式就會保持運行。當然,你可以通過以下四種方法終止一個timer線程:

a)調用timer的cancle方法。你可以從程式的任何地方調用此方法,甚至在一個timer task的run方法裡;

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

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

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”)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.