定时任务调度工作(学习记录 二)timer定时函数的用法

  


schedule的四种用法:

1.schedule(task,time)

参数:

task----所安排的任务

time----执行任务的时间

作用:

在时间等于或超过time的时候执行且仅执行一次task(ps:这里的  超过  是指time设置为在当前时间之前时,会立即执行task)

测试:

public class MyTimerTask extends TimerTask{
    private String name;
    public MyTimerTask(String inputName) {
        name = inputName;
    }
    @Override
    public void run() {
        //以yyyy-MM-dd HH:mm:ss的格式打印当前执行时间
        //如2019-4-22 00:00:00
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //打印当前name的内容
        System.out.println("Current exec name is:" + name + "--------------" + sf.format(calendar.getTime()));
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
public class MyTimer {
    public static void main(String[] args) {
        //创建一个timer实例
        Timer timer =new Timer();
        //创建一个MyTimerTask实例
        MyTimerTask myTimerTask = new MyTimerTask("No.1");
        //通过timer定时定频率调用myTimerTask的业务逻辑
        // 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次。执行的是myTimerTask中的run方法。
        //timer.schedule(myTimerTask, 2000L,1000L);
        
        
        /*获取当前时间,并设置成距离当前时间三秒之后的时间
         * 如当前时间是2019-4-22 23:59:57
         * 则设置后的时间则为2019-4-23 00:00:00 
         * */
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(calendar.getTime()));
        calendar.add(Calendar.SECOND, 3);
        //--------- schedule的用法 --------
        /*1.schedule(task,time)
         *   在时间等于或超过time的时候执行且仅执行一次task  
         * */
        myTimerTask.setName("schedule1");
        timer.schedule(myTimerTask, calendar.getTime());
        }
}

运行结果如下:

2.schedule(task,time,period)

参数:

task----所要安排的任务

time----首次执行任务的时间

period----执行一次task的时间间隔,单位是毫秒

作用:

时间等于或超过time时首次执行task

之后每隔period毫秒重复执行一次task

/*2.时间等于或超过time时首次执行task
          之后每隔period毫秒重复执行一次task
          之后每隔两秒执行一次task*/
        myTimerTask.setName("schedule2");
        timer.schedule(myTimerTask, calendar.getTime(),2000);

执行效果如下:

3.schedule(task,delay)

参数:

task----所要安排的任务

delay----执行任务前的延迟时间,单位是毫秒

作用:

等待delay毫秒后执行且仅执行一次task

演示:

/*3.等待delay毫秒后执行且仅执行一次task
         如现在是2019-4-22 00:00:00
         则在2019-4-22 00:00:01第一次执行task:打印任务的名字
         */
        myTimerTask.setName("schedule3");
        timer.schedule(myTimerTask,1000);

执行效果如下:

 4.schedule(task,delay,period)

参数:

task----所要安排的任务

delay----执行任务前的延迟时间,单位是毫秒

period----执行一次task的时间间隔,单位是毫秒

作用:

等待delay毫秒后首次执行task0

之后每隔period毫秒重复执行一次task

 演示:

/*4.等待delay毫秒后首次执行task
          之后每隔period毫秒重复执行一次task
          如现在是2019-4-22 00:00:00
          则在2019-4-22 00:00:03第一次执行task:打印任务的名字
             之后每隔两秒执行一次task*/
        myTimerTask.setName("schedule4");
        timer.schedule(myTimerTask,3000,2000);

执行效果如下:


 scheduleAtFixedRate的两种用法:

scheduleAtFixedRate(task,time,period)

参数:

task----所要安排的任务

time----首次执行任务的时间

period----执行一次task的时间间隔,单位是毫秒

作用:

时间等于或超过time时首次执行task

之后每隔period毫秒重复执行一次task

演示:

/*1.时间等于或超过time时首次执行task
          之后每隔period毫秒重复执行一次task
          之后每隔两秒执行一次task*/
        myTimerTask.setName("scheduleAtFixedRate1");
        timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(),2000);

执行效果如下:

scheduleAtFixedRate(task,delay,period)

参数:

task----所要安排的任务

delay----执行任务前的延迟时间,单位是毫秒

period----执行一次task的时间间隔,单位是毫秒

作用:

等待delay毫秒后首次执行task

之后每隔period毫秒重复执行一次task

 演示:

/* 2.等待delay毫秒后首次执行task
         之后每隔period毫秒重复执行一次task
         如现在是2019-4-22 00:00:00
          则在2019-4-22 00:00:03第一次执行task:打印任务的名字
             之后每隔两秒执行一次task*/
        myTimerTask.setName("scheduleAtFixedRate2");
        timer.scheduleAtFixedRate(myTimerTask, 3000, 2000);

 执行效果如下:

原文地址:https://www.cnblogs.com/xk920/p/10749849.html