欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Timer 定时任务

程序员文章站 2024-01-23 14:58:46
...

一、指定时间执行

public class TestMain{
    private static Timer timer = new Timer();
    static public class  MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("运行时间为:" + new Date());
        }
    }
    public static void main(String[] args){
        try {
            MyTask myTask = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String sdfString = "0000-00-00 00:00:00";//大于当前时间
            Date dateRef = sdf.parse(sdfString);
            System.out.println("字符串时间:"+dateRef.toLocaleString() + " 当前时间:" + new Date().toLocaleString());
            timer.schedule(myTask, dateRef);//将MyTask 加入任务队列
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

二、按指定的间隔周期性地无限循环地执行某一个任务

public class TestMain{

    static public class MyTask extends TimerTask {
        @Override
        public void run() {
            System.out.println("运行时间:" + new Date());
        }
    }
    public static void main(String[] args){
        try {
            MyTask myTask = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Timer timer = new Timer();
            String dateStr = "0000-00-00 00:00:00";
            Date dateRef = sdf.parse(dateStr);
            System.out.println("字符串时间:" + dateRef.toLocaleString() + "当前时间:" + new Date().toLocaleString());
            timer.schedule(myTask, dateRef, 4000);
            //timer.cancel(); 有时不一定会停止执行定时任务,而是正常执行(该例子不适用)
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

三、延时执行

timer.schedule(myTask, long delay);//毫秒

四、在此delay延时的基础上,再以某一间隔时间无限次数地执行某一个任务

timer.schedule(myTask, long delay, long period);//间隔时间period毫秒

五、timer.scheduleAtFixedRate 方法
(1)schedule方法:下一次执行时间相对于上一次实际执行完成的时间点 ,因此执行时间会不断延后
(2)scheduleAtFixedRate方法:下一次执行时间相对于上一次开始的时间点 ,因此执行时间不会延后,存在并发性 。