http://www.importnew.com/9978.html

java.util.Timer是一个实用工具类,该类用来调度一个线程,使它可以在将来某一时刻执行。 Java的Timer类可以调度一个任务运行一次,或定期运行。

java.util.TimerTask是一个抽象类,它实现了Runnable接口。我们需要扩展该类以便创建自己的TimerTask,这个TimerTask内部使用java Timer类,可以被调度。

Timer类是线程安全的,多进程不需要外部同步机制就可以共享同一个Timer对象。Timer类使用java.util.TaskQueue在指定时间间隔添加任务,在任何时刻只能有一个线程执行TimerTask。例如,创建一个每10秒运行的Timer,但单个线程的执行时间花费20秒,Timer对象将持续将任务添加到队列,一旦有任务结束,它就会通知队列,并且另外一个线程将启动执行。

Timer类使用对象的wait和notify方法来调度任务。

如下是一个使用Timer和TimerTask的实例。

MyTimerTask.java

 1 import java.util.Date;
 2 import java.util.Timer;//Timer类在JDK中3个包下都有.这个是util包下的.
 3 import java.util.TimerTask;
 4
 5 public class MyTimerTask extends TimerTask {
 6
 7     @Override
 8     public void run() {
 9         System.out.println("Timer task started at:"+new Date());
10         completeTask();//就是让线程睡两秒
11         System.out.println("Timer task finished at:"+new Date());
12     }
13
14     private void completeTask() {
15         try {
16             //assuming it takes 20 secs to complete the task
17             Thread.sleep(20000);
18         } catch (InterruptedException e) {
19             e.printStackTrace();
20         }
21     }
22
23     public static void main(String args[]){
24         TimerTask timerTask = new MyTimerTask();
25         //running timer task as daemon thread
26         Timer timer = new Timer(true);
27         timer.scheduleAtFixedRate(timerTask, 0, 10*1000);
28         System.out.println("TimerTask started");
29         //cancel after sometime
30         try {
31             Thread.sleep(120000);
32         } catch (InterruptedException e) {
33             e.printStackTrace();
34         }
35         timer.cancel();
36         System.out.println("TimerTask cancelled");
37         try {
38             Thread.sleep(30000);
39         } catch (InterruptedException e) {
40             e.printStackTrace();
41         }
42     }
43 }

输出的结果:

TimerTask started
Timer task started at:Sat Mar 07 20:39:24 CST 2015
Timer task finished at:Sat Mar 07 20:39:44 CST 2015
Timer task started at:Sat Mar 07 20:39:44 CST 2015
Timer task finished at:Sat Mar 07 20:40:04 CST 2015
Timer task started at:Sat Mar 07 20:40:04 CST 2015
Timer task finished at:Sat Mar 07 20:40:24 CST 2015
Timer task started at:Sat Mar 07 20:40:24 CST 2015
Timer task finished at:Sat Mar 07 20:40:44 CST 2015
Timer task started at:Sat Mar 07 20:40:44 CST 2015
Timer task finished at:Sat Mar 07 20:41:04 CST 2015
Timer task started at:Sat Mar 07 20:41:04 CST 2015
TimerTask cancelled
Timer task finished at:Sat Mar 07 20:41:24 CST 2015

public void scheduleAtFixedRate(TimerTask task,long delay,long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。 task - 所要安排的任务。delay - 执行任务前的延迟时间,单位是毫秒。period - 执行各后续任务之间的时间间隔,单位是毫秒。

public void cancel()终止此计时器,丢弃所有当前已安排的任务。这不会干扰当前正在执行的任务(如果存在)。一旦终止了计时器,那么它的执行线程也会终止,并且无法根据它安排更多的任务。

注意,在此计时器调用的计时器任务的 run 方法内调用此方法,就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务。

可以重复调用此方法;但是第二次和后续调用无效。

输出结果证实,如果一个任务已经执行,Timer将等待它执行结束,一旦任务执行结束,Timer对象将再次启动队列中的下一个任务。

Timer对象可作为一个守护线程运行相关的任务。Timer的cancel()方法用于终止计时器,并丢弃待调度的任务。然而,Timer不会干扰当前执行的任务,并且让它执行结束。如果计时器用于执行守护线程,无论是否取消它,它都会等待所有用户线程结束后终止。

Timer类包含一些sechedule()方法用于调度一个任务在指定时间运行一次或者延时之后运行。还有一些scheduleAtFixedRate()方法用于在一定间隔后周期运行任务

当使用Timer调度任务时,必须确保时间间隔超过正常程序运行时间,否则任务队列的大小将持续增长,最终程序将无法停止。

[ImportNew]Java中的Timer类和TimerTask类相关推荐

  1. Timer类 和 TimerTask类。一种有用计时器工具。可以每隔相同时间去执行某任务一次。

    1,编写一个类 继承TimerTask类 public class MyTimerTask extends TimerTask {@Overridepublic void run() {System. ...

  2. java在dog中定义name变量,组合构造 冯跃峰 java中组合的应用(不相干的类共同完成一个功能)+构造器回顾...

    java中组合的应用(不相干的类共同完成一个功能)+构造器回顾:今天我们了解到java的组合.可以说java组合是非常的重要的.可以对类进行封装,将底层的内容封装起来.甚至于java的继承都没有其重要 ...

  3. Java中的Type接口和Class类区别和联系

    Java中的Type接口和Class类有什么区别 Type是Class的父接口. Type 是 Java 编程语言中所有类型的公共高级接口.它们包括原始类型.参数化类型.数组类型.类型变量和基本类型. ...

  4. java 中成员变量的名字和类的方法的名字可以一样.

    java 中成员变量的名字和类的方法的名字可以一样. public class fourone {public static void main(String[] args) {int first[] ...

  5. java 中操作字符串都有哪些类?它们之间有什么区别?

    java 中操作字符串都有哪些类?它们之间有什么区别? String.StringBuffer.StringBuilder String : final修饰,String类的方法都是返回new Str ...

  6. java中timer和timertask_使用Java中的Timer和TimerTask

    有的时候我们需要每隔一段时间去执行某个任务,在Java中提供了Timer and TimerTask来完成这个任务,本文提供一个应用程序的源代码告诉你如何使用这两个类. Timer和TimerTask ...

  7. Java中的Timer和Timer Task详解

    Java Timer&TimerTask原理分析 如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer ...

  8. Java的定时器Timer和定时任务TimerTask应用以及原理简析

    记录:272 场景:Java JDK自带的定时器Timer和定时任务TimerTask应用以及原理简析.在JDK工具包:java.util中可以找到源码,即java.util.Timer和java.u ...

  9. java捕获定时器抛出的异常_详细了解Java中定时器Timer的使用及缺陷分析

    在需要定时并且周期执行任务时,在最初的JAVA工具类库中,Timer可以实现任务的定时周期执行的需求,不过有一定的缺陷,比如,Timer是基于绝对时间而非相对时间,因此Timer对系统时钟比较敏感,本 ...

最新文章

  1. 北斗产业发展现状与前景预测研究
  2. spring中事件发布设计与实现
  3. 轻松自动化---selenium-webdriver(python) (六)
  4. MKL学习——线性代数概念相关
  5. 作为微软技术.net 3.5的三大核心技术之一的WCF虽然没有WPF美丽的外观
  6. 在php中调用java接口吗,php 调用 java 接口
  7. 关于地图制图大赛的8点说明,附地图学习资源
  8. Ajax实现页面局部刷新
  9. mysql的二级索引
  10. 记录php运行日记的方法
  11. 架构运维篇(四):Centos7/Linux中Tomcat安装SSL证书实践
  12. 用计算机打出5201 314文字,怎么识别书上或照片中的文字并保存为电子版?
  13. 专业显卡深度学习_MacOS+AMD-eGPU打造深度学习环境 | 第2期
  14. 挑筋(挑治)疗法——针挑治疗痔疮
  15. springCloud报错No instances available
  16. ElasticSearch: 使用Java Api 操作 ES
  17. matlab中peaks是什么,Matlab中的peaks函数.doc
  18. Python3 根据m3u8下载视频,批量下载ts文件并且合并
  19. unity 条目换位效果_Unity AI主题博客条目
  20. 任买分期搞了个“斩男春计划” 我从中看到了消费分期成功的秘诀

热门文章

  1. python 接雨水
  2. 计算机模拟多孔碳,多孔碳材料分子设计的三种方法
  3. mysql如果索引为uid间隙锁_mysql 开发进阶篇系列 10 锁问题 (使用“索引或间隙锁”的锁冲突)...
  4. 37镇魔曲网页版服务器状态,37镇魔曲网页版各职业攻略分析
  5. bus.js非父子组件之间通讯
  6. Linux 使用ps命令查看某个进程文件的启动位置
  7. 操作选项_消防设施操作员关键技能之六:能切换集中火灾报警控制器、消防联动控制器工作状态...
  8. 用c语言批量删除指定文件夹,C语言删除文件夹下所有代码的注释for Mac
  9. 【opencv】4.初始化Mat的方式、访问cv::Mat中的某个元素
  10. git - 简明指南