更新時間:2020-08-04 16:45:30 來源:動力節(jié)點 瀏覽2496次
如何使新創(chuàng)建的Timer為守護線程。先看一下API中提供的一個方法。
對Timer對象最后的引用完成后,并且所有未處理的任務都已執(zhí)行完成后,計時器的任務執(zhí)行線程會正常終止(并且成為垃圾回收的對象)。但是這可能要很長時間后才發(fā)生。默認情況下,任務執(zhí)行線程并不作為守護線程來運行,所以它能夠阻止應用程序終止。如果調(diào)用者想要快速終止計時器的任務執(zhí)行線程,那么調(diào)用者應該調(diào)用計時器的cancel方法。
這里說的是用Timer的cancel方法,但是還有一個方法就是構(gòu)造函數(shù)的時候,調(diào)用的是帶boolean參數(shù)的構(gòu)造函數(shù)。
下面看一下代碼的示例。
可以看到這邊任務執(zhí)行完后進程就停止了。
前面是說了單個TimerTask任務,那么多個TimerTask任務運行起來會是怎么樣的呢?
Timer是允許多個TimerTask任務的,下面看一下代碼示例。
這里創(chuàng)建了兩個任務對象。Timer去啟動兩個任務對象,從結(jié)果可以看到,Timer是允許多個TimerTask任務的。其實在Timer里面的TimerTask任務是以隊列的方式一個一個被順序執(zhí)行的,上面的代碼可能還看不出來,下面創(chuàng)建兩個MyTask類(所運行的時間不一樣),下面看下代碼及測試結(jié)果。
任務1里面不做睡眠處理。
在任務2中,讓線程睡眠20s(模擬任務執(zhí)行時間20s),下面看下測試類和結(jié)果。
從結(jié)果可以看到,MyTask1先開始運行,MyTask2需要排隊,等待MyTask1運行完后才能繼續(xù)運行。
所以總結(jié)來說,TimerTask是以隊列的方式一個一個被順序執(zhí)行的,所以執(zhí)行的時間有可能和預期的時間不一致,因為前面的任務有可能消耗的時間比較長,則后面的任務運行的時間也會被延遲。
Java Timer定時器:http://www.dabaquan.cn/tutorial_java_advance/672.html
以上就是動力節(jié)點java培訓機構(gòu)的小編針對“Java多線程,Timer類的使用”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。