寒玉 Blog
  • Home
  • Books
  • About Me
  • Categories
  • Tags
  • Archives

JAVA8 Timer & TimerTask

概览

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

Example

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


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.");
    }
}

运行结果

About to schedule task.
Task scheduled.
##5秒之后输出
Time\'s up! 

通过代码可以总结用Timer线程直线和执行一个计划任务的步骤:

  • 实现自动以的TimerTask子类,run方法包含要执行的代码
  • 实例化Timer类,创建计时器后台线程
  • 实例化任务对象
  • 制定执行计划

终止线程

默认情况下,只要一个程序的timer线程在运行,那么这个程序会一直保持运行,结束的方法有四种:

  • 调用Timer的cancel方法
  • 让Timer线程成为一个Daemon线程
  • 当timer相关的所有task都执行完毕后,删除所有此timer对象引用(设置为null)
  • 调动System.exit()方法.

方法摘要

Timer类方法摘要

void cancel()
    //终止此计时器,丢弃所有当前已安排的任务。   
int purge()
    //从此计时器的任务队列中移除所有已取消的任务。   
void schedule(TimerTask task, Date time) 
    //安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
    //安排指定的任务在指定的时间开始进行重复的固定延迟执行。   
void schedule(TimerTask task, long delay)  
    //安排在指定延迟后执行指定的任务。 
void schedule(TimerTask task, long delay, long period)
    //安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。   
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
    //安排指定的任务在指定的时间开始进行重复的固定速率执行。   
void scheduleAtFixedRate(TimerTask task, long delay, long period)
    //安排指定的任务在指定的延迟后开始进行重复的固定速率执行。  

TimerTask类方法摘要

boolean cancel() //取消此计时器任务。   
abstract  void run()   //此计时器任务要执行的操作。   
long scheduledExecutionTime()   //返回此任务最近实际 执行的已安排 执行时间。

参考

  • http://blog.csdn.net/mark_lq/article/details/50320265
  • http://zengzhaoshuai.iteye.com/blog/1121105

  • « PostgreSQL Allow Remote Connection
  • AWS Athena Query S3 Json Data »

Published

1 22, 2018

Category

java

Tags

  • java 15
  • jvm 9
  • timer 1
  • Powered by Pelican. Theme: Elegant by Talha Mansoor