16.11 Timer和TimerTask Java 2的1.3版在java.util中增加了一个有趣又有用的功能部件:提供了提前安排将来某时间要执行任务的能力。支持这项功能的类是Timer和TimerTask。使用这些类可以创建一个工作于后台的线程,该线程等待一段指定的时间。当指定的时间到来时,与该线程相连的任务被执行。不同的选项允许安排一个任务重复执行,或安排一个任务在指定的时间运行。尽管永远都可能使用Thread类利用手工方法创建一个在指定的时间执行的任务,但是使用Timer和TimerTask却大大简化了这一过程。Timer和TimerTask一起工作。Timer是一个用于安排一个将来执行的任务的类。被安排的任务必须是TimerTask的一个实例。因此,为了安排一个任务,首先应该创建一个TimerTask对象,然后使用Timer的一个实例安排执行它。TimerTask实现了Runnable接口;因此它可以被用于创建一个执行线程。它的构造函数如下所示: TimerTask( ) TimerTask定义了表16-8中的方法。注意run( )是一个抽象方法,这意味着它可以被覆盖。由Runnable接口定义的run( )方法包含了将被执行的程序代码。因此创建一个定时器任务的最简单的办法是扩展TimerTask和重载run( )。 表16-8 由TimerTask 定义的方法 方法 描述 boolean cancel( ) 终止任务。如果任务的执行被阻止了,则返回true;否则返回false abstract void run( ) 包含了定时器任务的代码 long scheduledExecutionTime( ) 返回被安排最后执行的任务的时间 第16 章 java.util 第2 部分:更多的实用工具类 363 一旦任务被创建,它将通过一个类型Timer的对象被安排执行。Timer的构造函数如下: Timer( ) Timer(boolean DThread) 第一种形式创建一个以常规线程方式运行的Timer对象。第二种形式当DThread为true时,使用后台进程线程。只要剩下的程序继续运行,后台进程线程就会执行。由Timer定义的方法列在表16-9中。 表16-9 由Timer 定义的方法 方法 描述 void cancel( ) 终止定时器线程 void schedule(TimerTask TTask, long wait) TTask被安排在由参数wait传递的周期之后执行 wait参数的单位是毫秒 void schedule(TimerTask TTask, long wait, long repeat) TTask被安排在由参数wait传递的周期之后执行。 任务随后在由repeat指定的时间间隔重复执行。参数wait和repeat的单位都是毫秒 void schedule(TimerTask TTask, Date targetTime) TTask被安排在由targetTime指定的时间执行 void schedule(TimerTask TTask, Date targetTime, long repeat) TTask被安排在由targetTime指定的时间执行。接着任务在由repeat传递的时间间隔重复执行。 repeat参数的单位是毫秒 void scheduleAtFixedRate(TimerTask TTask,long wait, long repeat) TTask被安排在经过由参数wait传递的周期之后执行。任务随后在由repeat指定的时间间隔重复执行。参数wait和repeat的单位都是毫秒。每一次重复的时间是和第一次执行,而不是和前一次执行的时间有关。因此执行的总速度是固定的void scheduleAtFixedRate(TimerTask TTask,Date targetTime, long repeat)TTask被安排在由targetTime指定的时间执行。任务随后在由repeat指定的时间间隔重复执行。参数repeat的单位是毫秒。每一次重复的时间是和第一次执行,而不是和前一次执行的时间有关。因此执行的总速度是固定的一旦Timer被创建,将可以通过调用创建的Timer的schedule( )方法来安排任务。正如表16-9所示的那样,这里有几种schedule( )方法的形式,这些形式允许用各种办法来安排任务。如果创建了一个非后台进程任务,当你的程序结束时,你可能希望调用cancel( )方法来结束任务。如果不这样做的话,你的程序可能被“挂起”一个周期时间。下面的程序说明了Timer和TimerTask。该程序定义了一个定时器任务,它的run( )方法显示消息“Timer task executed.”。该任务被安排在最初的一秒延时后,恰好半秒钟运行一次。 // Demonstrate Timer and TimerTask. import java.util.*; class MyTimerTask extends TimerTask { public void run() { System.out.println("Timer task executed."); } } class TTest { public static void main(String args[]) { MyTimerTask myTask = new MyTimerTask(); Timer myTimer = new Timer(); /* Set an initial delay of 1 second, then repeat every half second. */ myTimer.schedule(myTask, 1000, 500); try { Thread.sleep(5000); } catch (InterruptedException exc) {} myTimer.cancel(); } } 16.12 java.util.zip包 java.util.zip包提供了读、写流行的ZIP格式或GZIP格式文件的能力。ZIP和GZIP都输入和输出可用的数据流。另外一些类实现了用于压缩和解压缩的ZLIB算法。 16.13 java.util.jar包java.util.jar包提供了读、写Java存档(JAR)文件的能力。在第25章将会看到,JAR文件被用来包含被称作Java Beans的软件及任何相关文件
<<上一页
1
2
3
4
5
6
|