线程总结(十):特殊的“线程”类:定时器 - Timer

Java 提供了一个特殊的工具类:Timer,严格意义上来讲它并不属于多线程范畴,实际上它也并不和 Thread、Runnable 在同一个包。

Timer 主要负责计划任务的功能,也就是在指定的时间开始执行某个任务。Timer用来设置计划任务,但封装任务的类确实 TimerTask 类。

我们常常使用 Timer 来实现一些需要在指定时间执行的任务或者按指定周期执行的任务。

构造方法

  • Timer()

        创建一个新计时器。 
    
  • Timer(boolean isDaemon)

        创建一个新计时器,可以指定其相关的线程作为守护程序运行。 
    
  • Timer(String name)

        创建一个新计时器,其相关的线程具有指定的名称。 
    
  • Timer(String name, boolean isDaemon)

        创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。 
    

守护线程可以看作是整个 JVM 中所有非守护线程的保姆,当最后一个非守护线程结束时,所有的守护线程也同时跟着结束,但假如有一个非守护线程还在运行,那么守护线程就会一直存在并一直工作。

Timer 的方法

  • cancel()

      终止此计时器,丢弃所有当前已安排的任务,但是不会干扰已经在执行中的任务。
    
  • purge()

      从此计时器的任务队列中移除所有已取消的任务。 
    
  • schedule(TimerTask task, Date time)

      安排在指定的时间执行指定的任务。 
    
    • task - 所要安排的任务。
    • time - 执行任务的时间。
  • schedule(TimerTask task, Date firstTime, long period)

      安排指定的任务在指定的时间开始进行重复的固定延迟执行。 
    
    • task - 所要安排的任务。
    • firstTime - 首次执行任务的时间。
    • period - 执行各后续任务之间的时间间隔,单位是毫秒。
  • schedule(TimerTask task, long delay)

      安排在指定延迟后执行指定的任务。 
    
    • task - 所要安排的任务。
    • delay - 执行任务前的延迟时间,单位是毫秒。
  • schedule(TimerTask task, long delay, long period)

      安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 
    
  • scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

      安排指定的任务在指定的时间开始进行重复的固定速率执行。 
    
  • scheduleAtFixedRate(TimerTask task, long delay, long period)

      安排指定的任务在指定的延迟后开始进行重复的固定速率执行。 
    

简单示例:

public class TimerTest {
    public static void main(String[] args) {
        Timer timer = new Timer("定时器");

        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                Date date = new Date(this.scheduledExecutionTime());
                System.out.println(date);
            }
        }, 5000, 1000);
    }
}

运行结果:5 秒之后开始输出

Sun Feb 19 00:41:42 CST 2017
Sun Feb 19 00:41:43 CST 2017
Sun Feb 19 00:41:44 CST 2017
Sun Feb 19 00:41:45 CST 2017
Sun Feb 19 00:41:46 CST 2017
Sun Feb 19 00:41:47 CST 2017
Sun Feb 19 00:41:48 CST 2017
Sun Feb 19 00:41:49 CST 2017
Sun Feb 19 00:41:50 CST 2017
Sun Feb 19 00:41:51 CST 2017
Sun Feb 19 00:41:52 CST 2017
Sun Feb 19 00:41:53 CST 2017