4.3定时器框架(Timer Framework)

     经常需要为一个简短的执行(这任务只执行一次)安排时间列任务(一个单位的任务)或在制定的规则中重复执行。例如,你可能安排一个闹钟任务去运行一次(可能在早上唤醒这个任务),或安排一个夜间回滚任务在时间间隔中执行。对于任何一种任务,你能想要任务在特殊时间执行,或在将来或初始化的延迟时间执行。
    你可以使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值