Java Timer类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/84246528

1. Timer类

Timer类主要用于设置计划任务,TimerTask用于实现任务。

public class ThreadTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();

        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("TimerTask");
           }
        };
        timer.schedule(task, 0);
    }
}

任务虽然执行完了,但进程还未销毁,原因就在于Timer启动了一个线程。

public Timer(String name, boolean isDaemon) {
    thread.setName(name);
    thread.setDaemon(isDaemon);
    thread.start();
}
  • 设置Timer(boolean isDaemon)为守护进程,当主进程结束时,自动结束。

      Timer timer = new Timer(true);
    

调用TimerTask.cancel()Timer.cancel()方法来取消任务。调用TimerTask.cancel()方法会停止任务的执行,但不会影响整个Timer的执行。

2. 主要方法

Timer的主要方法

  • schedule(TimerTask task, Date time),在指定日期执行一次任务。
  • schedule(TimerTask task, Date firstTime, long period),在指定日期之后按指定的间隔周期,无限循环地执行某一任务。
  • schedule(TimerTask task, long delay),以当前时间为参考时间,在此时间基础上延迟指定的毫秒数执行一次任务。
  • schedule(TimerTask task, long delay, long period),以当前时间为参考时间,在此时间基础上延迟指定的毫秒数之后,按指定的间隔周期,无限循环地执行某一任务。
  • scheduleAtFixedRate(TimerTask task, Date firstTime, long period),在指定日期之后按指定的间隔周期,无限循环地执行某一任务。
  • scheduleAtFixedRate(TimerTask task, long delay, long period),以当前时间为参考时间,在此时间基础上延迟指定的毫秒数之后,按指定的间隔周期,无限循环地执行某一任务。
  • cancel(),取消所有任务。

TimerTask的主要方法

  • run(),运行本次任务
  • cancel(),取消本次任务

schedulescheduleAtFixedRate的区别

  • schedule会保证任务的间隔是按照定义的period参数严格执行的,如果某一次调度时间比较长,那么后面的时间会顺延,保证调度间隔都是period。
  • scheduleAtFixedRate是严格按照调度时间来的,如果某次调度时间太长了,那么会通过缩短间隔的方式保证下一次调度在预定时间执行。

例如执行一个3秒的循环任务,第一次任务执行了4秒,第二次执行了1秒。schedule的执行时间为0, 4, 7, 10, 13, …,而scheduleAtFixedRate的执行时间为0, 4, 6, 9, 12, …。

猜你喜欢

转载自blog.csdn.net/chennai1101/article/details/84246528