在JDK庫中,Timer類主要負責計劃任務的功能,即在指定的時間開始執行某一個任務。Timer類負責設置任務計劃,TimerTask類負責封裝任務,執行任務的代碼要放到TimerTask的子類中。java
方法schedule(TimerTask task,Date time)的使用線程
①在指定的日期執行一次某一任務code
public class MyTask extends TimerTask { public void run() { System.out.println("運行了,在"+ new Date()); } } public class Run { private static Timer timer = new Timer(); public static void main(String [] args) { MyTask myTask = new MyTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = "2016-03-06 20:00:00"; Date date = sdf.parse(time); timer.schedule(task, date); } }
可是注意,在執行完計劃任務以後,進程仍一直處於運行狀態。由於建立一個Timer對象就是啓動一個新的線程,並且這個新的線程並非守護線程,他會一直運行。orm
②下面將以上的任務改成守護線程,執行完任務後就銷燬。對象
public class MyTask extends TimerTask { public void run() { System.out.println("運行了,在"+ new Date()); } } public class Run { private static Timer timer = new Timer(true); public static void main(String [] args) { MyTask myTask = new MyTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = "2016-03-06 20:00:00"; Date date = sdf.parse(time); timer.schedule(task, date); } }
③若是計劃時間早於當前時間,則會當即執行任務隊列
④Timer中容許有多個TimerTask任務。TimerTask是以隊列的方式一個一個被順序執行的,因此執行時間可能與預期有差距。進程
方法schedule(TimerTask task, Date fistTime, long period)的使用io
在指定的日期後,按指定的間隔週期的無限循環執行某一任務。class
TimerTask類的cancel()方法用於將自身從重複執行隊列中清除。而Timer中cancel()方法用於將任務隊列中的所有任務都清除。date