2013-02-26 45 views
0

我需要每X秒執行一次任務。
我知道我可以使用TimerTaskScheduledThreadPool但我的問題是這個任務取決於狀態。
I.e.運行B的任務將執行的操作取決於運行結果A
什麼是最好的方法來編碼?
這樣做也許是根據前次運行的結果安排定期任務

while(true){ 
    //do stuff 
    Thread.sleep(5000); 
} 

是我可以在這裏做的最好?

回答

2

在TimerTask的實現只是定義你的狀態,然後使用Timer

TimerTask task = new TimerTask() 
{ 
    private int state = 0; 

    @Override 
    public void run() 
    { 
     System.out.println ("State is: " + state); 
     state += 1; 
    } 
}; 

new Timer().schedule (task, 0L, 1000L); 

這將運行任務的每一秒(每1000L毫秒),直到永遠。

+0

我需要每X秒運行一次「永遠」 – Jim 2013-02-26 12:28:55

+0

所以它只是總是調用'run'它不會重新創建可運行的? – Jim 2013-02-26 12:29:39

+0

@Jim在我的例子中'run'永遠在每個'TimerTask'的同一個實例上被調用。只是跑步,看看。 – 2013-02-26 12:31:54

1

我想你可以使用一個TimerTimerTask

Timer timer = new Timer(); 
TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     // Some task 
    } 
}; 
timer.schedule(task, 10000, 10000); 

它運行task10s10s初始第一時間延遲之後開始。

作爲每Timer.schedule的文檔,這種方法

安排指定的任務進行重複的固定延遲執行,在指定的延遲後 開始。隨後的執行以大約固定的時間間隔進行 ,由指定的時間段隔開。