2012-05-14 68 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并取消定时器。