4.3定时器框架(Timer Framework)

xiaoxiao2021-02-27  120

经常需要为一个简短的执行(这任务只执行一次)安排时间列任务(一个单位的任务)或在制定的规则中重复执行。例如,你可能安排一个闹钟任务去运行一次(可能在早上唤醒这个任务),或安排一个夜间回滚任务在时间间隔中执行。对于任何一种任务,你能想要任务在特殊时间执行,或在将来或初始化的延迟时间执行。     你可以使用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() { @Override public 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() { @Override public void run() { System.out.println(System.currentTimeMillis()); } }; Timer timer = new Timer(); timer.schedule(task, 0, 1000); } }      Listing4-6描述一个应用,它默认主线程第一次实例一个TimerTask匿名子类,它重写run()方法,并输出当前时间(毫秒)。这个默认主线程在实例Timer和执行它的schedule()方法,将这个task作为第一个参数。第二个和第三个参数安排任务,在没有初始延迟时间而是每1000毫秒之后重复执行这个任务。     执行上面的代码,你将会看如下的结果。

1496449834769 1496449835768 1496449836768 1496449837768 1496449838768 1496449839768 1496449840768 ···· 源码下载:git@github.com:owenwilliam/Thread.git

转载请注明原文地址: https://www.6miu.com/read-15277.html

最新回复(0)