Posted on 2010-01-14 14:06
瘋狂 閱讀(779)
評論(1) 編輯 收藏 所屬分類:
java
Timer類是用來執行任務的類,它接受一個TimerTask做參數
Timer有兩種執行任務的模式,最常用的是schedule,它可以以兩種方式執行任務:1:在某個時間(Data),2:在某個固定的時間之后(int delay).這兩種方式都可以指定任務執行的頻率.看個簡單的例子:


public static void main(String[] args) throws InterruptedException
{
Timer timer = new Timer();

timer.schedule(new TimerTask()
{
@Override

public void run()
{
System.out.print("|"+new Random().nextInt(10));
}
}, 1000,1000);
Thread.sleep(5000);
timer.cancel();
}
如果你使用的是JDK 5+,還有一個scheduleAtFixedRate模式可以用,在這個模式下,Timer會盡量的讓任務在一個固定的頻率下運行,舉例說明:在上面的例子中,我們想讓MyTask在1秒鐘后,每兩秒鐘執行一次,但是因為java不是實時的(其實java實時性很差.....),所以,我們在上個程序中表達的原義并不能夠嚴格執行.如果我們調用的是scheduleAtFixedRate,那么,Timer會盡量讓你的Task執行的頻率保持在2秒一次.運行上面的程序,假設使用的是scheduleAtFixedRate,那么下面的場景就是可能的:1秒鐘后,MyTask 執行一次,因為系統繁忙,之后的2.5秒后MyTask 才得以執行第二次,然后,Timer記下了這個延遲,并嘗試在下一個任務的時候彌補這個延遲,那么,1.5秒后,MyTask 將執行的三次."以固定的頻率而不是固定的延遲時間去執行一個任務"
上面程序的修改:

public static void main(String[] args) throws InterruptedException
{
Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask()
{
@Override

public void run()
{
System.out.print("|"+new Random().nextInt(10));
}
}, 1000,1000);
Thread.sleep(5000);
timer.cancel();
}