欢迎大家来到IT世界,在知识的湖畔探索吧!
前几天介绍了几个schedule方法的介绍,具体可以看下以下文章:
-
多线程之Timer类的使用(一)
-
多线程之Timer类的使用(二)
-
多线程之Timer类的使用(三)——循环执行
-
多线程之Timer类的使用(四)——清除队列
今天就来讲下其他的schedule方法。
-
schedule(TimerTask task, long delay)
该方法的主要作用是以当前时间为基准,延迟指定的毫秒数来执行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方法的区别,大家可以看看昨天的没有延时的情况。下面看下延时的结果。
从结果可以看到,如果执行任务的时间大于间隔运行的时间(延时),那么下一次任务开始是以前一次任务结束的时间来执行的。
还有一些内容就留到明天来讲吧~
今天就到这里了,明天收尾Timer类~~
谢谢大家的收看,喜欢的关注一波~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/35978.html