`
robinsoncrusoe
  • 浏览: 734881 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Java--JDK Timer定时器的使用

    博客分类:
  • JAVA
阅读更多
如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK 入门级的定期器Timer来执行重复任务。

一、原理

JDK中,定时器任务的执行需要两个基本的类:
    java.util.Timer;
    java.util.TimerTask;

要运行一个定时任务,最基本的步骤如下:
1、建立一个要执行的任务TimerTask。
2、创建一个Timer实例,通过Timer提供的schedule()方法,将TimerTask加入到定时器Timer中,同时设置执行的规则即可。

当程序执行了Timer初始化代码后,Timer定时任务就会按照设置去执行。

Timer中的schedule()方法是有多种重载格式的,以适应不同的情况。该方法的格式如下:
void schedule(TimerTask task, Date time)
          安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
          安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
          安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
          安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

Timer 是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题)。其所有构造方法都启动计时器线程。可以调用cancel() 终止此计时器,丢弃所有当前已安排的任务。purge()从此计时器的任务队列中移除所有已取消的任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。

TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。它有一个抽象方法run()----计时器任务要执行的操作。因此,每个具体的任务类都必须继承TimerTask类,并且重写run()方法。另外它还有两个非抽象的方法:
boolean cancel()
          取消此计时器任务。
long scheduledExecutionTime()
          返回此任务最近实际 执行的安排 执行时间。

二、例子

下面用Timer实现一个简单例子:

package stu.timer;
import java.util.Date;
import java.util.TimerTask;
/**
* 重复执行的任务
*
* @author leizhimin,2008-10-9 9:20:20
*/
public class TestTimerTask extends TimerTask {
        /**
         * 此计时器任务要执行的操作。
         */
        public void run() {
                Date executeTime = new Date(this.scheduledExecutionTime());
                System.out.println("本次任务执行的时间是" + executeTime);
        }
}

package stu.timer;
import java.util.Timer;
import java.util.TimerTask;
/**
* 测试JDK Timer的执行
*
* @author leizhimin,2008-10-9 9:24:35
*/
public class TestTimer {
        public static void main(String[] args) {
                Timer timer = new Timer();
                TimerTask task = new TestTimerTask();
                timer.schedule(task, 500L, 1000L);
        }
}

运行结果:
本次任务执行的时间是Mon Apr 04 22:00:31 CST 2011
本次任务执行的时间是Mon Apr 04 22:00:32 CST 2011
本次任务执行的时间是Mon Apr 04 22:00:33 CST 2011
本次任务执行的时间是Mon Apr 04 22:00:34 CST 2011
本次任务执行的时间是Mon Apr 04 22:00:35 CST 2011
本次任务执行的时间是Mon Apr 04 22:00:36 CST 2011

        ......
分享到:
评论

相关推荐

    java8集合源码-java:JDK8新特性

    java8集合源码定时器和定时器任务 定时器是线程调度任务以在后台线程中执行的工具。 任务可以安排为一次性执行,或定期重复执行。 与每个 Timer 对象相对应的是一个单独的后台线程,用于按顺序执行所有计时器的任务...

    【百占百胜】-三创比赛,学习定时器的心路历程and基于spring-task实现定时任务简单介绍

    在我了解的过程中发现java实现定时任务有四种,首先是jdk自带的两个Timer,ScheduledThreadPoolExecutor,后者是jdk1.5提出的,因为这个Timer毛病着实有点多,像什么单线程,出问题了其他任务也执

    Java定时更新数据—定时器

     Java.util.Timer:一种线程设施,用于安排以后再后台线程中执行的任务.可安排任务执行一次或者定期重复执行.其中几个方法需要我们注意一下:  cancel():终止此计时器,丢弃所有当前已安排的任务。  ...

    Java JDK实例宝典

    12 定时器Timer 第9章 Java GUI 9. 1 日历 9. 2 开窗户游戏 9. 3 标准型计算器 9. 4 更改组件的外观 9. 5 自定义对话框 9. 6 制作欢迎画面 9. 7 一个简单的编辑器 9. 8 Swing...

    java jdk实列宝典 光盘源代码

    定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务; 9 Java GUI 日历:使用swing和awt实现一个图形化的日历可以查询星期、日期和年份信息(CalenderTrain....

    桌面闹钟应用程序(定时器)

    桌面闹钟提醒!小应用程序 java JDK,jmf

    JAVA 范例大全 光盘 资源

    实例128 定时器(Timer) 371 实例129 没法吃饭(死锁) 372 实例130 方便吃饭(解决死锁) 375 实例131 查看JVM中所有的线程和线程组 376 实例132 执行任务(线程池) 378 实例133 碰撞的球(多线程) 382 ...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    Java范例开发大全 (源程序)

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7...

    java范例开发大全

    实例240 定时器(Timer) 458 实例241 数字定时器 459 13.5 线程连接池 462 实例242 手术任务(线程池) 462 实例243 模拟人工服务台(线程连接池) 466 13.6 线程应用实例 471 实例244 下雪的村庄 472 实例245 小...

    Java范例开发大全(全书源程序)

    实例240 定时器(Timer) 458 实例241 数字定时器 459 13.5 线程连接池 462 实例242 手术任务(线程池) 462 实例243 模拟人工服务台(线程连接池) 466 13.6 线程应用实例 471 实例244 下雪的村庄 472 实例...

    java范例开发大全(pdf&源码)

    实例240 定时器(Timer) 458 实例241 数字定时器 459 13.5 线程连接池 462 实例242 手术任务(线程池) 462 实例243 模拟人工服务台(线程连接池) 466 13.6 线程应用实例 471 实例244 下雪的村庄 472 实例245 小...

    Android开发与应用——张荣,原书配套课件

    7.3.3 Timer定时器 7.4 Android多线程通信机制 7.5 小结 练习 第8章 网络通信 8.1 通过HTTP访问网络 8.1.1 测试用Web服务器 8.1.2 WebView组件 8.1.3 HttpURLConnection 8.2 Socket编程 8.3 数据...

    Websocket案例

    这里对学习websocket的童鞋以及初学java架构思想有很好的帮助。 另外前台利用百度Echart来展示动态效果。 这对于学习Echart的童鞋也是一个很不错的案例。 这个案例很好的显示如何动态加载数据时,怎么来调用其API。 ...

    SomeJava:将以往项目应用中各种框架、中间件的使用方式抽取出来,希望以后给刚接触直接运行,入门参考。。

    tomcat-work 是《How Tomcat Works》的代码,可惜是Jdk1.4的,也可以作为学习用。 ###分布式小框架Demo gh-soa 作为服务端 gh-soa-remote gh-web 作为客户端,通过hessian访问soa。 帮别人弄的一个框架Demo、基于...

Global site tag (gtag.js) - Google Analytics