>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 25332 个阅读者 刷新本主题
 * 贴子主题:  【Java基础编程专题】定时器Timer类的用法 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2017-07-02 12:56:52     消息  查看  搜索  好友  邮件  复制  引用

本文参考:
《Java面向对象编程》,作者:孙卫琴
《漫画Java编程》,作者:孙卫琴,杜聚宾



在JDK的java.util包中提供了一个实用类Timer,它能够定时执行特定的任务。TimerTask类表示定时器执行的一项任务。以下Machine类演示了定时器的用法。
package usetimer;
import java.util.Timer;
import java.util.TimerTask;
public class Machine extends Thread{
  private int a;

  public void start(){
    super.start();
    Timer timer=new Timer(true);  //把与Timer关联的线程设为后台线程

    TimerTask task=new TimerTask(){  //匿名类
      public void run(){
        reset();
      }
    };
  
    timer.schedule(task,10,50);  //设置定时任务
  }
  public void reset(){a=0;}
  public void run(){
    for(int i=0;i<1000;i++){
      System.out.println(getName()+":"+a++);
      yield();
    }
  }
  public static void main(String args[])throws Exception{
    Machine machine=new Machine();
    machine.start();
  }
}

java.util.TimerTask类是一个抽象类,它实现了Runnable接口。在Machine类的start()方法中定义的匿名类继承TimerTask类,它的run()方法表示定时器需要定时完成的任务。

java.util.Timer类的构造方法有几种重载形式,有一种构造方法Timer(boolean isDaemon)允许把与Timer关联的线程设为后台线程。Timer类本身并不是线程类,但是在它的实现中,利用线程来执行定时任务。

Timer类的schedule(TimerTask task, long delay, long period)方法用来设置定时器需要定时执行的任务。task参数表示任务,delay参数表示延迟执行的时间,以毫秒为单位,period参数表示每次执行任务的间隔时间,以毫秒为单位。例如:

timer.schedule(task,10,50);

以上代码表明定时器将在10毫秒以后开始执行task任务(即执行TimerTask实例的run()方法),以后每隔50毫秒重复执行一次task任务。

Timer类的schedule方法还有一种重载形式:schedule(TimerTask task, long delay)。如果使用这个方法,那就表明仅仅执行一次任务,例如:

timer.schedule(task,10);

以上代码表明定时器将在10毫秒以后开始执行task任务,以后不再重复执行。
同一个定时器对象可以执行多个定时任务,例如:

timer.schedule(task1,0,1000);
timer.schedule(task2,0,500);

以上代码表明定时器会执行两个定时任务,第一个任务每隔1秒执行一次,第二个任务每隔500毫秒执行一次。



程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 admin 在 2022-03-15 14:40:06 重新编辑]
  Java面向对象编程-->面向对象开发方法概述之开发思想(上)
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->XML数据处理
  精通Spring-->Vue组件开发高级技术
  Vue3开发-->虚拟DOM和render()函数
  【Vue.js技术专题】Vue组件的数据监听
  【Vue.js技术专题】分割setup()函数
  【Spring Cloud Alibaba专题】ShardingSphere核心概念
  【Spring Cloud Alibaba专题】Dubbo框架中提供者回调消费者
  【Spring专题】把Model的数据存放在session范围
  【Spring专题】Spring框架的数据验证机制
  【持久化专题】用orphanRemoval属性映射父子关系
  【持久化专题】@Enumerated注解映射枚举类型
  【持久化专题】对象-关系的映射概念
  【持久化专题】Spring与Hibernate与JPA的整合
  【Java编程基础专题】用Scanner类读取用户在控制台输入的数据
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  IT技术书写作技巧分享:慎用概念和术语
  【Java基础编程专题】用static修饰符进行静态导入的作用和语...
  【Java基础编程专题】为什么说:继承关系最大的弱点就是打破...
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。