玩转Java定时器Timer类的用法
  3YcfDaxdRWte 2023年11月02日 81 0

在JDK的java.util包中提供了一个实用类Timer,它能够定时执行特定的任务。TimerTask类表示定时器执行的一项任务。

玩转Java定时器Timer类的用法_java

定时器能够定时执行特定的任务

以下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毫秒执行一次。

上文参考孙卫琴的经典Java书籍《Java面向对象编程》

玩转Java定时器Timer类的用法_java_02


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
3YcfDaxdRWte