java的timertask_JavaTimer和TimerTask详解
1.概覽
Timer是一種定時器工具,用來在一個后臺線程計劃執行指定任務。它可以計劃執行一個任務一次或反復多次。
TimerTask一個抽象類,它的子類代表一個可以被Timer計劃的任務。
簡單的一個例程:
import java.util.Timer;
import java.util.TimerTask;
/** *//**
* Simple demo that uses java.util.Timer to schedule a task to execute
* once 5 seconds have passed.
*/
public class Reminder ...{
Timer timer;
public Reminder(int seconds) ...{
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}
class RemindTask extends TimerTask ...{
public void run() ...{
System.out.println("Time's up!");
timer.cancel(); //Terminate the timer thread
}
}
public static void main(String args[]) ...{
System.out.println("About to schedule task.");
new Reminder(5);
System.out.println("Task scheduled.");
}
}
運行這個小例子,你會首先看到:
About to schedule task.
5秒鐘之后你會看到:
Time's up!
這個小例子可以說明一些用Timer線程實現和計劃執行一個任務的基礎步驟:
實現自定義的TimerTask的子類,run方法包含要執行的任務代碼,在這個例子里,這個子類就是RemindTask。
實例化Timer類,創建計時器后臺線程。
實例化任務對象 (new RemindTask()).
制定執行計劃。這里用schedule方法,個參數是TimerTask對象,第二個參數表示開始執行前的延時時間(單位是milliseconds,這里定義了5000)。還有一種方法可以指定任務的執行時間,如下例,指定任務在11:01 p.m.執行:
//Get the Date corresponding to 11:01:00 pm today.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
timer = new Timer();
timer.schedule(new RemindTask(), time);
2.終止Timer線程
默認情況下,只要一個程序的timer線程在運行,那么這個程序就會保持運行。當然,你可以通過以下四種方法終止一個timer線程:
調用timer的cancle方法。你可以從程序的任何地方調用此方法,甚至在一個timer task的run方法里。
讓timer線程成為一個daemon線程(可以在創建timer時使用new Timer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行。
當timer相關的所有task執行完畢以后,刪除所有此timer對象的引用(置成null),這樣timer線程也會終止。
調用System.exit方法,使整個程序(所有線程)終止。
Reminder 的例子使用了種方式。在這里不能使用第二種方式,因為這里需要程序保持運行直到timer的任務執行完成,如果設成daemon,那么當main線程 結束的時候,程序只剩下timer這個daemon線程,于是程序不會等timer線程執行task就終止了。
有些時候,程序的終止與否 并不只與timer線程有關。舉個例子,如果我們使用AWT來beep,那么AWT會自動創建一個非daemon線程來保持程序的運行。下面的代碼我們對 Reminder做了修改,加入了beeping功能,于是我們需要加入System.exit的調用來終止程序。
import java.util.Timer;
import java.util.TimerTask;
import java.awt.Toolkit;
/** *//**
* Simple demo that uses java.util.Timer to schedule a task to execute
* once 5 seconds have passed.
*/
public class ReminderBeep ...{
Toolkit toolkit;
Timer timer;
public ReminderBeep(int seconds) ...{
toolkit = Toolkit.getDefaultToolkit();
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}
class RemindTask extends TimerTask ...{
public void run() ...{
System.out.println("Time's up!");
toolkit.beep();
//timer.cancel(); //Not necessary because we call System.exit
System.exit(0);?? //Stops the AWT thread (and everything else)
}
}
考試大溫馨提示:本內容來源于網絡,僅代表作者個人觀點,與本站立場無關,僅供您學習交流使用。其中可能有部分文章經過多次轉載而造成文章內容缺失、錯誤或文章作者不詳等問題,請您諒解。如有侵犯您的權利,請聯系我們,本站會立即予以處理。
編輯推薦:
來源:考試大-Java認證
責編:xxm??評論?糾錯
上一頁1
總結
以上是生活随笔為你收集整理的java的timertask_JavaTimer和TimerTask详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++】数字的组合排列情况
- 下一篇: 为何QQ突然能注销了?近年推行的大好事知