该方法的主要作用是以当前时间为基准,延迟指定的毫秒数来执行TimerTask任务。具体请看下面的示例:
这里的mt是任务,里面只是简单的打印一句话。从结果可以看,任务被延迟4s执行,而且是只执行了一次。
schedule(TimerTask task, long delay, long period)
该方法的作用是以当前时间为参考时间,在此时间延迟设定的秒数delay,之后按照设置的间隔时间period无限次执行该任务。
有带delay的按照英文意思就是延迟,period是指一段时间。下面看下代码示例:
从结果可以看到,第一次执行的时候是按照延迟的时间执行,后面则按照设置的间隔时间无限次的执行。
scheduleAtFixedRate(TimerTask task, DatefristTime, long period)
该方法和schedule方法的区别主要在于不延时(执行任务的时间小于设定的间隔执行时间)的情况。
schedule方法:如果执行任务的时间没有被延时,那么下次任务的执行时间是参考上一次任务的开始时间来计算的,详见:多线程之Timer类的使用(三)——循环执行。
scheduleAtFixedRate方法:如果执行任务的时间没有被延时,那么下次执行任务的时间是参考上一次任务的结束时间来开始计算的。
而延时的情况则没有区别,也就是使用scheduleAtFixedRate和schedule方法执行任务的时间被延迟,那么下一次执行任务的时间是上一次任务的结束时间来计算的。下面看一下代码示例:
这边在任务里设置休眠一秒模拟不延时(设置间隔时间为4秒)的结果。从结果可以看到,任务变成了每1s执行一次,也就是说,任务一结束,下次的任务就开始了。这就是与schedule方法的区别,大家可以看看昨天的没有延时的情况。下面看下延时的结果。
从结果可以看到,如果执行任务的时间大于间隔运行的时间(延时),那么下一次任务开始是以前一次任务结束的时间来执行的。