更新時間:2020-08-04 16:45:30 來源:動力節點 瀏覽2595次
如何使新創建的Timer為守護線程。先看一下API中提供的一個方法。
對Timer對象最后的引用完成后,并且所有未處理的任務都已執行完成后,計時器的任務執行線程會正常終止(并且成為垃圾回收的對象)。但是這可能要很長時間后才發生。默認情況下,任務執行線程并不作為守護線程來運行,所以它能夠阻止應用程序終止。如果調用者想要快速終止計時器的任務執行線程,那么調用者應該調用計時器的cancel方法。
這里說的是用Timer的cancel方法,但是還有一個方法就是構造函數的時候,調用的是帶boolean參數的構造函數。
下面看一下代碼的示例。
可以看到這邊任務執行完后進程就停止了。
前面是說了單個TimerTask任務,那么多個TimerTask任務運行起來會是怎么樣的呢?
Timer是允許多個TimerTask任務的,下面看一下代碼示例。
這里創建了兩個任務對象。Timer去啟動兩個任務對象,從結果可以看到,Timer是允許多個TimerTask任務的。其實在Timer里面的TimerTask任務是以隊列的方式一個一個被順序執行的,上面的代碼可能還看不出來,下面創建兩個MyTask類(所運行的時間不一樣),下面看下代碼及測試結果。
任務1里面不做睡眠處理。
在任務2中,讓線程睡眠20s(模擬任務執行時間20s),下面看下測試類和結果。
從結果可以看到,MyTask1先開始運行,MyTask2需要排隊,等待MyTask1運行完后才能繼續運行。
所以總結來說,TimerTask是以隊列的方式一個一個被順序執行的,所以執行的時間有可能和預期的時間不一致,因為前面的任務有可能消耗的時間比較長,則后面的任務運行的時間也會被延遲。
Java Timer定時器:http://m.ilovecolors.com.cn/tutorial_java_advance/672.html
以上就是動力節點java培訓機構的小編針對“Java多線程,Timer類的使用”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習