博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程-50-Timer类
阅读量:4302 次
发布时间:2019-05-27

本文共 2192 字,大约阅读时间需要 7 分钟。

这篇来学习Timer类的基本使用,什么是Timer类,查看Java jdk API文档,可以看到第一句话:一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。这句话,就是我们本篇学习和练习的内容。生活中实际使用的例子有:手机闹钟,你可以设置闹钟一次,或者重复闹钟,例如上班期间周一到周五,早上六点半设置闹钟。如果是android手机,闹钟就用到了Timer类。等学习完本篇,你就知道android闹钟的工作原理。

1.查看Timer类 API文档

打开JDK 6 API文档,搜索Timer,注意是 java.util.Timer ,这样就看到了文章提到的这句话。

       这里,我们来练习使用这两个schedule方法。schedule方法的作用就是安排制定的时间执行指定的任务。我们就来模仿闹钟的设置来学习这两个成员方法。

2. schedule(TimerTask task, Date time)

这个方法有两个参数,TimerTask是一个类实现了Runnable接口,作用是由 Timer 安排为一次执行或重复执行的任务。举例,闹钟响铃就是这里的TimerTask。第二个参数是一个时间,可以精确是年月日时分秒。下面,我们来写一段代码,模仿闹钟在制定的时间闹铃。

package thread;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Timer_Demo {	public static void main(String[] args) throws InterruptedException {		myTimerTask mt = new myTimerTask();		Timer t = new Timer();		// set year: 2019-1900 = 119		t.schedule(mt, new Date(119, 0, 5, 12, 43,40) );		while(true) {			Thread.sleep(1000);			System.out.println(new Date());		}	}}class myTimerTask extends TimerTask {	@Override	public void run() {		System.out.println("起床去上班了!");	}	}

这里我们定义一个自定义task类,继承了TimerTask类。这里我们当然写不出调用声卡驱动程序去响铃,所以,这里我们就写一个打印语句,显示起床去上班。在new Date()这里强调下,年份和月份的写法。年份=今年2019-1900=119,月份范围是0到11.执行结果是。

Sat Jan 05 12:43:32 CST 2019Sat Jan 05 12:43:33 CST 2019Sat Jan 05 12:43:34 CST 2019Sat Jan 05 12:43:35 CST 2019Sat Jan 05 12:43:36 CST 2019Sat Jan 05 12:43:37 CST 2019Sat Jan 05 12:43:38 CST 2019Sat Jan 05 12:43:39 CST 2019起床去上班了!Sat Jan 05 12:43:40 CST 2019Sat Jan 05 12:43:41 CST 2019Sat Jan 05 12:43:42 CST 2019

3.schedule(TimerTask task, Date time, long period)

添加了一个固定延迟的参数,上面这个例子我们是在特定时间点去打印起床去上班,那么有时候闹钟闹一次,你不去关闭,不理它。过几分钟有来响铃,这个是怎么实现的呢。看下面代码。

Sat Jan 05 13:52:43 CST 2019Sat Jan 05 13:52:44 CST 2019起床去上班了!Sat Jan 05 13:52:45 CST 2019Sat Jan 05 13:52:46 CST 2019Sat Jan 05 13:52:47 CST 2019起床去上班了!Sat Jan 05 13:52:48 CST 2019Sat Jan 05 13:52:49 CST 2019Sat Jan 05 13:52:50 CST 2019起床去上班了!Sat Jan 05 13:52:51 CST 2019Sat Jan 05 13:52:52 CST 2019Sat Jan 05 13:52:53 CST 2019起床去上班了!Sat Jan 05 13:52:54 CST 2019

上面设置了三秒的延迟,如果不主动关闭执行,每间隔三秒就闹铃一次。当然如果要模仿闹钟那样,第一次延迟十分钟,第二次延迟五分钟,第三次更短。那么这个也好做,定义一个retry变量,例如初始化间隔时间设置10分钟,那么我们上面代码间隔时间就可以这样写 (60000/2*retry), 用户忽略不关闭闹钟一次,retry次数就加1.。所以,闹钟的原理,大致就是这么实现的。

 

转载地址:http://czows.baihongyu.com/

你可能感兴趣的文章
消息队列2
查看>>
C++ 线程同步之临界区CRITICAL_SECTION
查看>>
c++中SetEvent和ResetEvent的使用
查看>>
MFC 定时器用法 SetTimer、KillTimer
查看>>
WaitForSingleObject的详细用法
查看>>
测试—自定义消息处理
查看>>
MFC中关于虚函数的一些问题
查看>>
MFC多线程各种线程用法 .
查看>>
MFC GDI绘图基础
查看>>
VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)
查看>>
MFC通过对话框窗口句柄获得对话框对象指针
查看>>
MFC获得主窗口和父窗口指针
查看>>
MFC设置主界面背景图片、设置子窗体背景图片
查看>>
VC6.0下opencv1.0的环境配置
查看>>
MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
查看>>
VS2010中如何实现自定义MFC控件
查看>>
MFC中的Document-View结构
查看>>
MFC的Serialize机制及其使用(转)
查看>>
在MFC里面实现线程的实例
查看>>
MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
查看>>