Timer 的简单使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Timer 的简单使用相关的知识,希望对你有一定的参考价值。

参考技术A Timer 的简单使用: 按照我的理解,Timer 相当于一个线程任务调度器,new 一个 Timer 并且设置它的 schedule 方法可以很方便地决定要执行什么任务,延迟多久才执行,每隔多长时间后再一次执行。
如何设置 Timer对象的 schedule 方法呢?
先来看到 schedule 方法的签名:

可以看到 schedule 方法的参数列表中:

delay 和 period 的中文意思分别是 “延迟” 和 “周期”。而对于一个定时任务来讲,“延迟”和“周期”是该定时任务的属性。决定了一个定时任务需要延迟多少毫秒(该参数的单位)开始执行,以及循环执行定时任务的周期大小。

第一个参数对于初学者来讲就略显复杂了。我自己也是刚刚接触。TimerTask 本身是一个实现了Runnable接口的抽象类,有线程知识的同学都很清楚,在Runnable接口中,声明了一个run()方法。这个方法是线程的执行任务单元。当一个线程启动之后,要完成的工作就是去执行run()方法。

而TimerTask抽象类实现了Runnable接口,所以TimerTask也存在 run() 方法。 run()方法是线程要执行的任务,所以将这个任务交给定时器的schedule方法。

然后这个定时器在底层会在延迟时间结束后,启动这个线程任务, 并且周期性循环。

上面程序中,Thread.sleep(2000)的存在是为了延长测试方法的生命周期,使得定时器的效果得以体现,即每隔1秒往控制台输出1条信息。
(end)

Java Timer和TimerTask的使用

如果要执行一些简单的定时器任务,无需做复杂的控制,也无须保存状态,可以考虑使用JDK入门级的定时器Timer来执行重复任务。

JDK中,定时器任务的执行需要两个基本的类:

java.util.Timer;java.util.TimerTask;

运行一个定时任务基本步骤如下:

1、建立一个要执行的任务TimerTask;

2、创建一个Timer实例,通过Timer提供的schedule()方法,将TimerTask加入到定时器Timer中,同时设置执行的规则即可;

Timer中的schedule()有多种重载方法,以适应不同的情况:

schedule(TimerTask task, Date time):安排在指定时间执行指定任务;

schedule(TimerTask task, Date firsttime, Long period):安排指定的任务在指定时间指定周期重复执行;

schedule(TimerTask task, Long delay):安排在指定延迟后执行指定任务;

schedule(TimerTask task, Long delay, Long period):安排指定的任务从指定的延迟后开始重复的固定延迟执行;

 

示例如下:

 

import java.util.Timer; import java.util.TimerTask;

public class Test {  class TestTimerTask extends TimerTask{   private int i = 1;   @Override   public void run() {    System.out.println("定时器第"+i+"次执行!");    i += 1;       }     }  public static void main(String[] args) {   Test test = new Test();   Timer timer = new Timer();   timer.schedule(test.new TestTimerTask(), 3000, 2000);  } }

 

以上是关于Timer 的简单使用的主要内容,如果未能解决你的问题,请参考以下文章

Timer和DispatcherTimer简单使用

ScheduledExecutorService延时线程池的简单使用

C# Timer 最简单形象的教程

Quartz简单使用

定时任务Timer

基于Thread实现自己的定时器Timer