zoukankan      html  css  js  c++  java
  • Timer与TimerTask

    Timer和TimerTask

      Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
    TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。

    import java.util.Timer;
    import java.util.TimerTask;
    
    /**
    * Simple demo that uses java.util.Timer to schedule a task to execute
    * once 5 seconds have passed.
    */
    
    public class Reminder {
        Timer timer;
    
        public Reminder(int seconds) {
            timer = new Timer();
            timer.schedule(new RemindTask(), seconds*1000);
        }
    
        class RemindTask extends TimerTask {
            public void run() {
                System.out.println("Time's up!");
                timer.cancel(); //Terminate the timer thread
            }
        }
    
        public static void main(String args[]) {
            System.out.println("About to schedule task.");
            new Reminder(5);
            System.out.println("Task scheduled.");
        }
    }
    • 每一个Timer仅对应唯一一个线程。
    • Timer不保证任务执行的十分精确。
    • Timer类的线程安全的。

      1、终止Timer线程 

    • 调用timer的cancle方法。你可以从程序的任何地方调用此方法,甚至在一个timer task的run方法里。
    • 让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。
    • 当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。
    • 调用System.exit方法,使整个程序(所有线程)终止。

      2、反复执行

      timer.schedule(new RemindTask(),
                   0,        //initial delay
                   1*1000);  //subsequent rate

      这里使用了三个参数的schedule方法用来指定task每隔一秒执行一次。如下所列为所有Timer类用来制定计划反复执行task的方法 :

    • schedule(TimerTask task, long delay, long period)
    • schedule(TimerTask task, Date time, long period)
    • scheduleAtFixedRate(TimerTask task, long delay, long period)
    • scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

    当计划反复执行的任务时,如果你注重任务执行的平滑度,那么请使用schedule方法,如果你在乎的是任务的执行频度那么使用scheduleAtFixedRate方法。 使用了schedule方法,这就意味着所有beep之间的时间间隔至少为1秒,也就是说,如果有一个beap因为某种原因迟到了(未按计划执行),那么余下的所有beep都要延时执行。如果我们想让这个程序正好在3秒以后终止,无论哪一个beep因为什么原因被延时,那么我们需要使用scheduleAtFixedRate方法,这样当第一个beep迟到时,那么后面的beep就会以最快的速度紧密执行(最大限度的压缩间隔时间)。

  • 相关阅读:
    Pandas | 21 日期功能
    Pandas | 20 级联
    Pandas | 19 合并/连接
    Pandas | GroupBy 分组
    Pandas | 缺失数据处理
    Pandas | 16 聚合
    Pandas | 15 窗口函数
    Pandas | 14 统计函数
    Pandas | 13 索引和选择数据
    Pandas | 12 选项和自定义
  • 原文地址:https://www.cnblogs.com/chappell/p/8607967.html
Copyright © 2011-2022 走看看