JDK中的Timer和TimerTask详解.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JDK中的Timer和TimerTask详解

JDK中的Timer和TimerTask详解 1. Timer和TimerTask   Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。   TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。 2. 一个Timer调度的例子 import java.util.Timer; import java.util.TimerTask; public class TestTimer { public static void main(String args[]){ System.out.println(About to schedule task.); new Reminder(3); System.out.println(Task scheduled.); } public static class Reminder{ Timer timer; public Reminder(int sec){ timer = new Timer(); timer.schedule(new TimerTask(){ public void run(){ System.out.println(Times up!); timer.cancel(); } }, sec*1000); } } } 运行之后,在console会首先看到: About to schedule task. Task scheduled. 然后3秒钟后,看到 Times up! 从这个例子可以看出一个典型的利用timer执行计划任务的过程如下: new一个TimerTask的子类,重写run方法来指定具体的任务,在这个例子里,我用匿名内部类的方式来实现了一个TimerTask的子类 new一个Timer类,Timer的构造函数里会起一个单独的线程来执行计划任务。jdk的实现代码如下: 调用相关调度方法执行计划。这个例子调用的是schedule方法。 任务完成,结束线程。这个例子是调用cancel方法结束线程。 3. 如何终止Timer线程   默认情况下,创建的timer线程会一直执行,主要有下面四种方式来终止timer线程: 调用timer的cancle方法 把timer线程设置成daemon线程,(new Timer(true)创建daemon线程),在jvm里,如果所有用户线程结束,那么守护线程也会被终止,不过这种方法一般不用。 当所有任务执行结束后,删除对应timer对象的引用,线程也会被终止。 调用System.exit方法终止程序 clear方法很简单,就是去清空queue,queue是一个TimerTask的数组,然后把queue的size重置成0,变成empty.还是没有看到显式的停止线程方法,回到最开始new Timer的时候,看看new Timer代码: public Timer() { this(Timer- + serialNumber()); } public Timer(String name) { thread.setName(name); thread.start(); } 看看这个内部变量thread: private TimerThread thread = new TimerThread(queue); 不是原生的Thread,是自定义的类TimerThread.这个类实现了Thread类,重写了run方法,如下: public void run() { try { mainLoop(); } finally { // Someone killed this Thread, behave as if Timer cancelled synchronized(queue) { newTasksMayBeScheduled = false; queue.clear(); // Eliminate obs

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档