关于Timer中schedule和scheduleAtFixedRate的区别

来源:百度知道 编辑:UC知道 时间:2024/04/30 04:26:05
在调scheduleAtFixedRate方法执行任务时,启动服务器任务重复连续执行两次,而用schedule则执行一次
timer.schedule(new EnterAction(), time, 1000 * 60 * 60 * 1); //执行一次

timer.scheduleAtFixedRate(new EnterAction(), time, 1000 * 60 * 60 * 1);//执行两次

只是为什么呢,再请问这两个方法的区别是什么呢
这个问题已经清楚了,补充一个问题,我现在有一段程序,需要每天执行一次,用上面的哪个方法更好些呢

首先,java的问题问到这里,不妥。然后,问到这里,还不讲清楚是java,更加不妥。。

没有人说你说的不清楚啊,还是说你在别的地方提了相同的问题,人家说你讲的不清楚?其实,我也不明白你说的“启动服务器任务重复连续执行两次”是指什么?以下引用java api的原话“在固定速率执行中,根据已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他背景活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。”不知道你有没有看过,我觉得应该和你的问题有关。

如果你要一天执行一次的话,我觉得该用scheduleAtFixedRate,因为我曾经写过一个秒表的测试程序,当时一开始用的是schedule,然后发现很不准。我让他每隔10毫秒,更新gui界面,但到后来,延迟的越厉害。也就是我虽然告诉他10毫秒做一次,但有可能是11毫秒才做,那么运行时间长了以后,误差就会累计成非常大的数字。

上面的例子也就基本说明了两个方法的区别了,其实这个区别从名字上就能看出来吧