0
我希望Java Timer在每t秒后n次调用函数。我现在正在尝试这个功能,它在每t秒后调用一次函数,但是我希望这个函数只能被调用n次。Java Timer在每t秒后n次调用函数
Timer tt = new Timer();
tt.schedule(new MyTimer(url), t);
我希望Java Timer在每t秒后n次调用函数。我现在正在尝试这个功能,它在每t秒后调用一次函数,但是我希望这个函数只能被调用n次。Java Timer在每t秒后n次调用函数
Timer tt = new Timer();
tt.schedule(new MyTimer(url), t);
我认为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);
试试Executor服务。你必须数你自己,多久你叫Callable并取消定时器。
您正在递减'N',然后检查'counter'?你认为这会起作用吗?你需要'final int [] counter = {n}'然后'counter [0] - '然后'if(counter [0] == 0)'。将Timer定义为长时间运行的对象并向其提交新的TimerTask(并取消TimerTask)也更好。 –
减少'n'是一个错字。感谢您指出并立即修复。关于'Timer'或'TimerTask'应该取消,我认为这取决于程序的要求。如果程序应该在n个作业之后存在,那么'Timer'应该被取消。如果程序将连续运行并且'Timer'将被重用,那么'TimerTask'应该被取消是完全正确的。为什么计数器应该是一个数组寿命? – evanwong
您是否尝试编译该代码?现在您正在尝试减少最终变量。你不能关闭非最终的局部变量,所以我向你展示了解决这个问题的标准技巧。 –