关于Timer中schedule和scheduleAtFixedRate的区别

作者&投稿:茹逸 (若有异议请与网页底部的电邮联系)
定时任务中的 Timer的schedule和scheduleAtFixedRate方法的区别?~

  schedule和scheduleAtFixedRate的区别在于:如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。
  示例如下:
SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date d1 = fTime.parse("2005/12/30 14:10:00"); t.scheduleAtFixedRate(new TimerTask(){ public void run() { System.out.println("this is task you do6"); } },d1,3*60*1000);
  程序分析:
  1、间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,如果在14:17:00分执行这个程序,那么会立刻打印3次
this is task you do6 //14:10this is task you do6 //14:13this is task you do6 //14:16
  并且注意,下一次执行是在14:19 而不是 14:20。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时;
  2、上面如果用schedule方法,间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,那么在14:17:00分执行这个程序,则立即执行程序一次。并且下一次的执行时间是 14:20,而不是从14:10开始算的周期(14:19)。

楼主,我们看API文档,好吧,,,,,参数各有不同

void
schedule(TimerTask task,
Date time)
Schedules the specified task for execution at the specified time.

void
schedule(TimerTask task, Date firstTime, long period)
Schedules the specified task for repeated fixed-delay execution,
beginning at the specified time.

void
schedule(TimerTask task, long delay)
Schedules the specified task for execution after the specified delay.

void
schedule(TimerTask task,
long delay, long period)
Schedules the specified task for repeated fixed-delay execution,
beginning after the specified delay.




void
scheduleAtFixedRate(TimerTask task,
Date firstTime, long period)
Schedules the specified task for repeated fixed-rate execution,
beginning at the specified time.

void
scheduleAtFixedRate(TimerTask task,
long delay, long period)
Schedules the specified task for repeated fixed-rate execution,
beginning after the specified delay.


参数中
delay参数是延时,就是延时多少毫秒后开始。
period 是周期,就是隔多少毫秒后,再执行下一次
time 就是执行的时间,不循环

firstTime 就是首次执行的时间


schedule 会等本次执行完毕、再下一次


scheduleAtFixedRate 就是不管上一次有没有执行完毕,都继续本次、也会按原定时间,执行下一次。。。。。。。。。。

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

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

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

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


怎样用vb关闭笔记本显示器
Long, ByVal wParam As Long, lParam As Any) As Long Const WM_SYSCOMMAND = &H112& Const SC_MONITORPOWER = &HF170& Private Sub Command1_Click()SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal 2& ''关闭显示器 Timer1.Interval = 5000 '5秒后自动打开显示器 Timer1....

谁能帮我翻译一下~谢谢
使用。 这些定时器可以用于测量间隔时间,计数外部事件和引起周期性 中断请求。 定时器0和定时器1是几乎相同的并且有四种主要运作方式。定时器2提供16位,并且分裂8位定时器功能与自动再装。定时器0和1也许由五个来源之一计时,由定时器方式精选的位(T1M- T0M )和时钟标度位(SCA1-SCA0)确定。 时钟...

VB高手进...
加个Timer时钟,然后取出前台窗口就可以 判断了。。代码如下 Private Declare Function GetAsyncKeyState Lib "user32"(ByVal vKey As Long)As Integer Private Declare Function GetCursorPos Lib "user32"(lpPoint As Point)As Long Private Declare Function GetForegroundWindow Lib "user32"()As Long...

android中如何实现信息定时发送
private Handler mHandler = new Handler() { \/ *发送控制 \/ Override public void handleMessage(Message msg) { switch(msg.what) { case 123:SmsManager manager = SmsManager.getDefault();\/\/得到默认的SmsManager。\/** destinationAddress:接收方的手机号码 scAddress:发送方的手机号码 text:信息...

VB 求设置XP中关屏笔记本电脑显示器的代码
Timer1.Interval = 1000 Timer1.Enabled = False End Sub Private Sub Timer1_Timer()If Time = DateAdd("s", Val(Text1.Text), A_time) Then SendMessage GetForegroundWindow, WM_SYSCOMMAND, SC_MONITORPOWER, 2 End Sub 注意:textbox里直接输入秒即可,例如如果要20秒后关闭,则输入20然后...

空间素材现在时间怎么弄?
打开空间,主页,自定义,模块,新建模块,Flash模块,Flash动画地址,http:\/\/删除掉,粘贴刚才的链接,更多设置。链接打开方式3项都选,模块边框选“无”确认。鼠标按住右下角不放拉到你喜欢的大小后保存 http:\/\/flash.meqzone.com\/sc\/timer.swf?id=7 http:\/\/flash.meqzone.com\/sc\/timer.swf?id=...

为什么我双击桌面上的游戏图表示,却弹出一个对话框说页面文件太小无法完...
这是因为你没有设置虚拟内存或虚拟内存太小。解决方法:右键“我的电脑”-- 属性 -- 高级 -- 性能 -- 设置 -- 高级 -- 虚拟内存 -- 更改 先择自定义大小,最小值设为物理内存1.5倍(例如256的内存设为384),最大值设为物理内存2.5倍,修改完后点击设置按钮,这样就OK了。如果还是不行的...

在网页设计中 想让几张图片 像幻灯片放映 该如何做?
用时间轴和层,隐藏和显示,或者用时间轴和直接的图像交换行为结合

谁能帮帮我???急...!!!
var timerID;function startTest(){ document.bgColor=document.response.bgColorChange.options[document....function _S_p2Bcn(strQuest,wb_url){var _sl_scsd=_S_PWD_.getElementById("sudsclickstreamdiv

传奇BLUE转到SKY的详细脚本分析
BLUEM2 SETSCTIMER ID(0-9) 定时间隔(秒)用于停止指定的定时器,格式:KILLSCTIMER ID(0-9)[替换实例]使用字符替换搜索“SETSCTIMER”替换为“SETONTIMER”继续将“KILLSCTIMER”替换为“SetOffTimer”6.WebBrowser 查询后发现,这个东西应该和内嵌IE有关系。具体不明。7.自动穿背包中的装备 SKYM2...

芗城区17512182266: Timer的schedule和scheduleAtFixedRate方法的区别解析 -
野胖清凉: schedule和scheduleatfixedrate的区别在于:如果指定开始执行的时间在当前系统运行时间之前,scheduleatfixedrate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上. 示例如下: simpledateformat ftime = new ...

芗城区17512182266: Timer和ScheduledThreadPoolExecutor的区别 -
野胖清凉: Timer的主要方法有:// 安排在指定的时间执行 void schedule(TimerTask task, Date time)// 安排在指定的时间开始以重复的延时执行 void schedule(TimerTask task, Date firstTime, long period)// 安排在指定的延迟后执行 void schedule(TimerTask ...

芗城区17512182266: 如何正确的使用Timer的schedule方法 -
野胖清凉: 在java中,Timer类主要用于定时性、周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)schedule方法:“fixed-delay”;如果第一次执行时间被delay了,随后的执行时间按

芗城区17512182266: Java关于Timerschedule执行定时任务是什么?
野胖清凉: 技术人员在实现内部办公系统与外部网站一体化的时候,最重要的步骤就是从OA系... 技术人员在写定时任务的时候,想当然的以为Timer.schedule(TimerTask task, long ...

芗城区17512182266: 如何正确的使用Timer的schedule()方法? -
野胖清凉: 今天算是彻底的搞懂了这个曾经让我为之头疼的方法.下面我就重点介绍一下: 第一个参数,是 TimerTask 类,在包:import java.util.TimerTask .使用者要继承该类,并实现 public void run() 方法,因为 TimerTask 类 实现了 Runnable 接口. ...

芗城区17512182266: 关于Timer中schedule和scheduleAtFixedRate的区别 -
野胖清凉: 首先,java的问题问到这里,不妥.然后,问到这里,还不讲清楚是java,更加不妥.. 没有人说你说的不清楚啊,还是说你在别的地方提了相同的问题,人家说你讲的不清楚?其实,我也不明白你说的“启动服务器任务重复连续执行两次”是...

芗城区17512182266: java timer使用方法 -
野胖清凉: Timer都是跟TimerTask两个类结合一块使用的,Timer中最重要的就是schedule方法,下面这个历史是利用Timer跟TimerTask循环执行打印语句哈.其他schedule方法的使用请参考api,里面写的很详细的.public class TimerTest3 { public static ...

芗城区17512182266: Java中使用Timer的schedule方法设定程序定点执行问题 -
野胖清凉: time.schedule方法第二个参数可以是指延迟多少毫秒开始执行,也可以是一个Date,第三个参数指每隔多少毫秒执行一次task.run 这样你可以懂了吧,先new Date() 设定时间为17:00:00 或者计算出与17:00:00间隔多少毫秒 第三个参数指定了间隔多少时间运行一次,24*3600*1000就是每天运行一次

芗城区17512182266: Java - java怎么再次设置Timer的schedule -
野胖清凉: 需要先将Time cancel掉,再重建一个Time执行.例如:public class TimerTest {public static void main(String[] args){Timer timer = new Timer(); timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个...

芗城区17512182266: java 怎么写定时任务 -
野胖清凉: 如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK 入门级的定期器Timer来执行重复任务.一、原理 JDK中,定时器任务的执行需要两个基本的类:java.util.Timer; java.util.TimerTask; 要运行一个...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网