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


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會盡量的讓任務(wù)在一個固定的頻率下運行,舉例說明:在上面的例子中,我們想讓MyTask在1秒鐘后,每兩秒鐘執(zhí)行一次,但是因為java不是實時的(其實java實時性很差.....),所以,我們在上個程序中表達的原義并不能夠嚴格執(zhí)行.如果我們調(diào)用的是scheduleAtFixedRate,那么,Timer會盡量讓你的Task執(zhí)行的頻率保持在2秒一次.運行上面的程序,假設(shè)使用的是scheduleAtFixedRate,那么下面的場景就是可能的:1秒鐘后,MyTask 執(zhí)行一次,因為系統(tǒng)繁忙,之后的2.5秒后MyTask 才得以執(zhí)行第二次,然后,Timer記下了這個延遲,并嘗試在下一個任務(wù)的時候彌補這個延遲,那么,1.5秒后,MyTask 將執(zhí)行的三次."以固定的頻率而不是固定的延遲時間去執(zhí)行一個任務(wù)"
上面程序的修改:

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();
}