android timer的schedule和scheduleAtFixedRate运用
来源:互联网 发布:java web项目高并发 编辑:程序博客网 时间:2024/04/29 08:18
在java中,Timer类主要用于定时性、周期性任务的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下
java代码如下:
- SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- Date startDate = dateFormatter.parse("2010/11/26 00:20:00");
- Timer timer = new Timer();
- timer.scheduleAtFixedRate(new TimerTask(){
- public void run()
- {
- System.out.println("execute task!" + this.scheduledExecutionTime());
- }
- },startDate,3*60*1000);
分析:
A.以上的代码,表示在2010-11-26 00:20:00秒开始执行,每3分钟执行一次.
假设在2010/11/26 00:27:00执行,以上会打印出3次
execute task! 00:20
execute task! 00:23 catch up
execute task! 00:26 catch up
下一次执行时间是00:29,是相对于设定的执行时间00:20而言
B.当换成schedule方法时,在2010/11/26 00:27:00执行会打印出1次.
execute task! 00:20 无catch up
下一次执行时间为00:30,是相对于实际执行时间00:27而言
(1)scheduleAtFixedRate方法:“fixed-rate”;如果第一次执行时间被延迟了,随后的执行时间按照设定的开始执行时间(实例中是:2010/11/26 00:20:00)进行计算,并且为了达到固定的速率,会执行从设定的开始执行时间到实际执行时间之间的周期任务(比如设定是0点执行任务,设定的周期是10分钟,那么当1点钟才开始执行任务时,这时会立即执行六次任务),这时TimerTask中的执行体需要考虑同步。
(2)schedule方法:“fixed-delay”;如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算。
P.S : 以上考虑的都是在你设定的timer开始时间后,程序才被执行。
当执行任务的时间大于周期间隔时,会发生什么呢?
(1)schedule方法:下一次执行时间是相对于上一次实际执行完成的时间点,因此执行时间会不断延后.
(2)scheduleAtFixedRate方法:下一次执行时间是相对于上一次开始的时间点,因此执行时间不会延后,存在并发性.
以下例程序来测试上述结论,TimerTask需要执行6秒钟,但是间隔周期为5秒钟
- package test;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
- public class Test {
- public static void main(String[] args) throws ParseException {
- SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- Date startDate = dateFormatter.parse("2010/11/28 01:06:00");
- Timer timer = new Timer();
- timer.schedule(new TimerTask(){
- public void run() {
- try {
- Thread.sleep(6000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("execute task!"+ this.scheduledExecutionTime());
- }
- },startDate, 5 * 1000);
- }
- }
schedule方法的执行结果如下:
execute task!1290877560001
execute task!1290877566001
execute task!1290877572001
execute task!1290877578001
execute task!1290877584001
execute task!1290877590001
execute task!1290877596001
execute task!1290877602001
execute task!1290877608001
execute task!1290877614001
execute task!1290877620001
execute task!1290877626001
execute task!1290877632001
execute task!1290877638001
可以看出,间隔时间都为6秒,因此,下一次的执行时间点=上一次程序执行完成的时间点+间隔时间
当换成scheduleAtFixedRate方法的执行结果如下:
execute task!1290877860000
execute task!1290877865000
execute task!1290877870000
execute task!1290877875000
execute task!1290877880000
execute task!1290877885000
execute task!1290877890000
execute task!1290877895000
execute task!1290877900000
execute task!1290877905000
execute task!1290877910000
execute task!1290877915000
execute task!1290877920000
execute task!1290877925000
execute task!1290877930000
可以看出,间隔时间都为5秒,因此,下一次的执行时间点=上一次程序开始执行的时间点+间隔时间;并且因为前一个任务要执行6秒,而当前任务已经开始执行了,因此两个任务间存在重叠,需要考虑线程同步
- android timer的schedule和scheduleAtFixedRate运用
- Timer的schedule和scheduleAtFixedRate的区别
- Timer的schedule和scheduleAtFixedRate的区别
- Timer的schedule和scheduleAtFixedRate的区别
- Timer的schedule和scheduleAtFixedRate方法辨析
- Timer中schedule和scheduleAtFixedRate的不同
- Timer的scheduleAtFixedRate和schedule区别
- Timer中的schedule()和scheduleAtFixedRate()
- Timer的schedule 、scheduleAtFixedRate方法
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- [java]Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- 安卓在API21的时候提供提供了一个JobScheduler 任务队列的东东。
- 一群高中生创建了eduITer,发布原创的IT技能课程视频,你有没有觉得汗颜?
- IT业人才发展最佳实践是什么
- 通知与消息机制
- 微观SOA:服务设计原则及其实践方式
- android timer的schedule和scheduleAtFixedRate运用
- 软件测试大概的思路
- Linux时间同步+国内常用的NTP服务器地址
- OC 3月29日学习总结
- P2P 之 UDP穿透NAT的原理与实现
- 正则表达式在ios中的应用
- IOS正则表达式的使用
- [省选前题目整理][BZOJ 1565][NOI 2009]植物大战僵尸(最小割+最大权闭合子图建模)
- 安卓的MVP,MCV,MVVM模式之MVP(1)