Java定时执行任务 Timer和TimerTask

介绍

在java中要定时执行任务,需要用到Timer类

一般有两种方式:

  1. 延迟n秒后执行,且只执行一次
  2. 延迟n秒后第一次执行,执行后,每间隔m秒重复执行

1.延时n秒后执行,且只执行一次

例子如下:

public class Test {

    public Test(){
        System.out.println("构造方法");
    }
    public void test(){
        System.out.println("test");
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        final Timer timer=new Timer();
        final Test test=new Test();
        TimerTask tt=new TimerTask() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                test.test();
                timer.cancel();//执行一次任务后终止计时器,如果不加此代码进程无法退出
            }
        };
        timer.schedule(tt, 2000);//延时2秒后执行,且只执行一次
    }

}

控制台打印效果如图:

构造方法
test

2.延时n秒后第一次执行,执行后,每间隔m秒再次执行

例子如下:

public class Test {

    public Test(){
        System.out.println("构造方法");
    }
    public void test(){
        System.out.println(new Date()+"--test");
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        final Timer timer=new Timer();
        final Test test=new Test();
        TimerTask tt=new TimerTask() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                test.test();
            }
        };
        timer.schedule(tt, 1000,5000);//延时1秒后第一次执行,执行后每间隔5秒执行一次
    }

}

在上面的代码中,延时1秒后第一次执行,执行后每间隔5秒执行一次
控制台显示:

构造方法
Fri May 05 10:40:18 CST 2017--test
Fri May 05 10:40:23 CST 2017--test
Fri May 05 10:40:28 CST 2017--test