打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
8.3.1 Timer和TimerTask类(2)

8.3.1 Timer和TimerTask类(2)

2011-12-26 09:55 周华清/李为民/张昌龙 清华大学出版社 字号:T | T

《Java典型模块与项目实战大全》第8章关机工具(Timer类+系统命令),本章将通过模拟关机工具的功能,介绍如何调用Windows系统命令,还将详细介绍线程的类Timer。本节为大家介绍Timer和TimerTask类。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

8.3.1  Timer和TimerTask类(2)

最后,通过查看API帮助文档可以发现,如果想实现执行计划、定时任务,首先需要继承TimerTask类并重写该类的run()方法来实现任务功能,然后通过调用Timer类的schedule()方法执行TimerTask类对象。详细介绍如下。

1.TimerTask类

对于TimerTask类,其是扩展了Object并实现了Runnable接口的抽象类,因此在具体编程时,可以在public void run()方法中编写具体的执行任务。该类拥有几个重要方法,如下所示。

(1)public boolean cancel()

该方法用来终止计时器任务的执行运行。

注意:Timer类要求循环执行任务(TimerTask任务)时,如果该对象正在执行,则会在执行完之后不会再循环执行;如果还未执行或处于停歇期,则不会执行。

(2)public abstract void run()

该方法为计时器任务要执行的操作。

(3)public long scheduledExecutionTime()

该方法用来返回计时器任务被安排最后执行的时间,一般用来确定计时器任务的运行是否足够及时,执行是否正当。

2.Timer类

对于Timer类,主要用来控制TimerTask类的任务执行一次或者定期重复执行,该类拥有4个构造函数,分别如下。

(1)Timer()

该构造函数用来创建一个默认的计时器。

(2)Timer(boolean isDaemon)

参数isDaemon指定线程的守护,创建一个指定守护线程的计时器。

注意:当参数isDaemon为true时,该计时器对象相关线程为后台进程线程,根据线程知识可以知道,如果应用程序中还有程序继续运行,后台线程进程就不会停止    执行。

(3)Timer(String name)

参数name为线程的名字,用来创建一个指定名称的相关线程的计时器。

(4)Timer(String name, boolean isDaemon)

该函数用来创建一个新计时器,不仅指定相关线程的名称,而且还指定其为后台线程。

在具体创建计时器对象时,不推荐使用Timer timer = new Timer(true)语句。因为这种方式创建的计时器对象,在应用程序结束后会自动结束,非常不利于使用。

yu我的理解是:对于非Daemon线程中的timer, 线程结束了,timer也就不存在了.

而在Daemon线程中的timer,可能使用timer的线程已退出,但timer所在线程仍在继续调度timer

除了构造函数外,该Timer类还拥有其他几个重要方法,其中最重要的方法就是各种重载的schedule()方法和scheduleAtFixedRate()方法,分别如下:

(1)public void schedule(TimerTask task,Date time)

参数task为所计时器任务对象,参数time为Data类型对象,该方法用来实现在指定的时间后执行计时器任务。

注意:如果参数time为过去时,则任务task对象会立刻执行。

(2)public void schedule(TimerTask task, long delay)

参数delay为long类型,该方法用来实现在指定的时间(毫秒)后执行计时器任务。

(3)public void schedule(TimerTask task, Date firstTime, long period)

参数firstTime为Date类型,表示第一次执行的时间;参数period为long类型,表示间隔的时间(毫秒);该方法用来在firstTime时间后执行任务task,同时在第一次执行后每隔period(毫秒)反复执行。每一次重复的间隔时间会因为前一次task的执行时间受到影响。

(4)public void schedule(TimerTask task,long delay, long period)

参数delay为long类型,该方法用来在firstTime时间(毫秒)后执行任务task,同时在第一次执行后每隔period(毫秒)反复执行。每一次重复的间隔时间会因为前一次task的执行时间受到影响。

注意:当表示时间的参数为long类型时,表示毫秒。由于long类型的时间并不能保证与时钟准确同步,所以拥有long类型的时间参数适合短期的保持频率。

(5)public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)

参数firstTime为Date类型,该方法用来在firstTime时间后执行任务task,同时在第一次执行后每隔period(毫秒)反复执行。每一次重复的间隔时间不会因为前一次task的执行时间受到影响。

(6)public void scheduleAtFixedRate(TimerTask task,long delay,long period)

参数firstTime为long类型,该方法用来在delay时间后执行任务task,同时在第一次执行后每隔period(毫秒)反复执行。每一次重复的间隔时间不会因为前一次task的执行时间受到影响。

当需要反复执行的任务时,如果注重任务执行的平滑度,那么需要使用schedule()方法,如果注重任务执行的频度,那么需要使用scheduleAtFixedRate()方法。例如,当使用schedule()方法时,意味着所有计时器任务之间的时间间隔至少为1秒,即如果有一个计时器任务因为某种原因迟到了(未按计划执行),那么余下的所有计时器任务都要延时执行。当使用scheduleAtFixedRate()方法时,如果有一个计时器任务因为某种原因迟到了(未按计划执行),那么后面余下的所有计时器任务还会以固定的间隔时间执行。即schedule()方法会实现固定延迟执行功能,而scheduleAtFixedRate()方法会实现固定速率执行功能。

最后还存在一个关闭Timer类的对象方法,如下所示。

  1. public void cancel() 

该方法用来终止Timer的功能执行。

注意:当执行该方法后,虽然不会对正在执行的任务有影响,但是却不会再分配其他任务。


【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
android几种定时器机制及区别(转载整理)
Timer定时器用法详解
Android计时器Timer使用案例分析
Java并发编程:Timer和TimerTask(转载)
Android  实现定时器的四种方式总结及实现实例
java定时器的使用(Timer)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服