4.3定时器框架(Timer Framework)

来源:互联网 发布:整理桌面的软件 编辑:程序博客网 时间:2024/05/21 18:48
     经常需要为一个简短的执行(这任务只执行一次)安排时间列任务(一个单位的任务)或在制定的规则中重复执行。例如,你可能安排一个闹钟任务去运行一次(可能在早上唤醒这个任务),或安排一个夜间回滚任务在时间间隔中执行。对于任何一种任务,你能想要任务在特殊时间执行,或在将来或初始化的延迟时间执行。
    你可以使用Thread和连接一个风格去创建一个框架来完成任务时间安排表。然后,Java1.3介绍一个更多方便和简单的可供选择的类,在java.util.Timer和java.util.TimerTask类中。
    定时器让你的TimerTasks在将来某个时刻在后台执行,这就是我们所知的任务执行线程(task-execution thread)。定时任务可以为一次执行或定期执行重复执行。
    Listing4-5展示了一个应用,证明一次执行一个定时任务。

    Listing4-5证明一个简短执行

package com.owen.thread.chapter4;import java.util.Timer;import java.util.TimerTask;public class TimerDemo{public static void main(String[] args){TimerTask task = new TimerTask(){@Overridepublic void run(){System.out.println("alarm going off");System.exit(0);}};Timer timer = new Timer();timer.schedule(task, 2000); // Execute one-shot timer task after// 2-second delay.}}
     Listing4-5描述一个应用,它在主线程第一次实例一个TimerTask的匿名子类,它重写了run()方法并输出一个警告信息,之后执行System.exit(0);因为这个应用要直到非守护线程结束了它才可以结束。这个主线程实例Timer和执行它的schedule()方法,将这个task作为第一个参数。第二个参数安排在一个初始延迟2000毫秒时间后一次执行任务。
    执行上面的程序,你将会在2000毫秒后看到输出:alarm going off。
    Listing4-6出现一个应用,证明一个定时的定时任务的重复执行。
    Listing4-6 在大约一秒钟的时间间隔内显示当前毫秒值
package com.owen.thread.chapter4;import java.util.Timer;import java.util.TimerTask;public class TimerDemo4_6{public static void main(String[] args){TimerTask task = new TimerTask(){@Overridepublic void run(){System.out.println(System.currentTimeMillis());}};Timer timer = new Timer();timer.schedule(task, 0, 1000);}}

     Listing4-6描述一个应用,它默认主线程第一次实例一个TimerTask匿名子类,它重写run()方法,并输出当前时间(毫秒)。这个默认主线程在实例Timer和执行它的schedule()方法,将这个task作为第一个参数。第二个和第三个参数安排任务,在没有初始延迟时间而是每1000毫秒之后重复执行这个任务。
    执行上面的代码,你将会看如下的结果。

 1496449834769149644983576814964498367681496449837768149644983876814964498397681496449840768····
源码下载:git@github.com:owenwilliam/Thread.git