2012-05-14 71 views
0

我希望Java Timer在每t秒後n次調用函數。我現在正在嘗試這個功能,它在每t秒後調用一次函數,但是我希望這個函數只能被調用n次。Java Timer在每t秒後n次調用函數

Timer tt = new Timer(); 
tt.schedule(new MyTimer(url), t); 

回答

4

我認爲Timer沒有它作爲一個內置函數。您將需要添加一個計數器來爲每個呼叫計數,然後在n次後使用cancel()停止計時器。

事情是這樣的:

final int[] counter = {n}; 
final Timer tt = new Timer(); 
tt.schedule(new TimerTask(){ 
    public void run() { 
     //your job 
     counter[0]--; 
     if (counter[0] == 0) { 
      tt.cancel(); 
     } 
    } 
}, t); 
+0

您正在遞減'N',然後檢查'counter'?你認爲這會起作用嗎?你需要'final int [] counter = {n}'然後'counter [0] - '然後'if(counter [0] == 0)'。將Timer定義爲長時間運行的對象並向其提交新的TimerTask(並取消TimerTask)也更好。 –

+0

減少'n'是一個錯字。感謝您指出並立即修復。關於'Timer'或'TimerTask'應該取消,我認爲這取決於程序的要求。如果程序應該在n個作業之後存在,那麼'Timer'應該被取消。如果程序將連續運行並且'Timer'將被重用,那麼'TimerTask'應該被取消是完全正確的。爲什麼計數器應該是一個數組壽命? – evanwong

+1

您是否嘗試編譯該代碼?現在您正在嘗試減少最終變量。你不能關閉非最終的局部變量,所以我向你展示瞭解決這個問題的標準技巧。 –

0

試試Executor服務。你必須數你自己,多久你叫Callable並取消定時器。