java多線程之定時器Timer的使用詳解
定時的功能我們在手機上見得比較多,比如定時清理垃圾,鬧鐘,等等.定時功能在java中主要使用的就是Timer對象,他在內(nèi)部使用的就是多線程的技術.
Time類主要負責完成定時計劃任務的功能,就是在指定的時間的開始執(zhí)行某個任務.
Timer類的作用是設置計劃任務,而封裝任務內(nèi)容的類是TimerTask類.此類是一個抽象類,繼承需要實現(xiàn)一個run方法.
通過查文檔我們看到Timer有以下幾個構造函數(shù):
Timer的方法以下這么多:
下面我們通過定時器來完成一個簡單功能,就是在運行項目三秒后,在控制臺打印出"您該起床了",來模擬一下鬧鐘的功能:
package com.wang.reflect; import java.util.Timer; import java.util.TimerTask; class MyTask extends TimerTask{ @Override public void run() { System.out.println("您該起床了!!!!"); } } public class TimerDemo { public static void main(String[] args) { //創(chuàng)建定時器對象 Timer t=new Timer(); //在3秒后執(zhí)行MyTask類中的run方法 t.schedule(new MyTask(), 3000); } }
運行后,我們發(fā)現(xiàn)三秒后控制臺打印出了相當?shù)奈淖?但是任務雖然執(zhí)行完了,進程卻沒有銷毀,還是呈紅色狀態(tài),這是什么原因呢?
創(chuàng)建了一個Timer就相當于啟動了一個新線程,這個新線程并不是守護線程,所以會一直運行.
在Time類和TimerTask類中都有一個cancel()方法.
TimerTask類中的作用是:將自身從任務隊列中清除,(一個Timer對象可以執(zhí)行多個Timertask任務)
Timer類中的作用是:將任務隊列中的全部任務清空.
下面寫一個實例,定時刪除指定磁盤某個目錄下的所有文件:
package com.wang.reflect; import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; class MyTask extends TimerTask{ /** * 定時刪除指定位置的文件,(這里以刪除f盤下aa文件夾的所有文件為例) */ @Override public void run() { File file=new File("f://aa"); deleteFolder(file); } public void deleteFolder(File file){ File[] files=file.listFiles(); for(File f:files){ if(f.isDirectory()){ //使用遞歸 deleteFolder(f); }else{ f.delete(); } } file.delete(); } } public class TimerDemo { public static void main(String[] args) throws ParseException { //創(chuàng)建定時器對象 Timer t=new Timer(); String time="2016-04-04 11:26:40"; Date d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time); t.schedule(new MyTask(), d); } }
注意,如果在上面測試代碼中,我給出的Date類型的時間,早于當前的時間.則會立即執(zhí)行task任務.
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring Boot 整合 Mockito提升Java單元測試的高效實踐案例
Mockito與Spring Boot的整合為Java開發(fā)者提供了一套完整的解決方案,使得單元測試更為精準、高效,從而確保了代碼質(zhì)量、降低了維護成本,并促進了項目的持續(xù)集成與交付,感興趣的朋友跟隨小編一起看看吧2024-04-04Java8使用Supplier啟動ScheduledThread代碼實例
這篇文章主要介紹了Java8使用Supplier啟動ScheduledThread詳解,項目開啟立即啟動定時任務是很多項目都會遇到的一個需求,如何利用Java提供的函數(shù)優(yōu)雅的寫出來十分考驗一個人的功底,需要的朋友可以參考下2024-01-01Mybatis-plus批量去重插入ON DUPLICATE key update使用方式
這篇文章主要介紹了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12java使用內(nèi)存數(shù)據(jù)庫ssdb的步驟
這篇文章主要介紹了java使用內(nèi)存數(shù)據(jù)庫ssdb的步驟,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12SpringBoot如何接收前端傳來的json數(shù)據(jù)
這篇文章主要介紹了SpringBoot如何接收前端傳來的json數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04Spring中bean的初始化和銷毀幾種實現(xiàn)方式詳解
這篇文章主要介紹了Spring中bean的初始化和銷毀幾種實現(xiàn)方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11