您好,我正在构建一个应用程序,它将在固定的时间段(例如每 30 分钟)执行一段代码。我希望这个时间段是严格的,我的意思是我希望保证该时间段为 30 分钟而不是 28 分钟,或者每当操作系统想要执行它时。
我有一个 Timer 对象并按如下方式使用它:
timer=new Timer();
timer.scheduleAtFixedRate(new GetLastLocation(), 0, this.getInterval());
其中 GetLastLocation 是扩展 TimerTask 的处理程序类。
这工作正常,但我希望能够更改间隔,我当前正在做的是使用timer.scheduleAtFixedRate两次并将间隔参数更改为newInterval,但我认为这只是让两个计时器在每个间隔执行和新的
现在间隔,我对吗?
我也尝试取消计时器,然后使用方法 ScheduleAtFixedRate() 但这会引发文档中所述的异常。
我能做什么来解决这个问题?
问候 maxsap
您不能安排已经取消或安排的计时器。您需要为此创建一个新的计时器。
Timer timer;
synchronized void setupTimer(long duration){
if(timer != null) {
timer.cancel();
timer = null;
}
timer = new Timer();
timer.scheduleAtFixedRate(new GetLastLocation(), 0, duration);
}
现在,只要您想更改计时器的持续时间,就可以调用 setupTimer。
PS: In
固定利率执行 http://download.oracle.com/javase/6/docs/api/,每次执行都是相对于初始执行的预定执行时间来安排的。如果执行因任何原因(例如垃圾收集或其他后台活动)而延迟,则将快速连续发生两个或多个执行以“赶上”。从长远来看,执行频率将恰好是指定周期的倒数(假设 Object.wait(long) 底层的系统时钟是准确的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)