zoukankan      html  css  js  c++  java
  • 定时任务调度工作(学习记录 二)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);

     执行效果如下:

  • 相关阅读:
    Linux内核学习笔记(6)-- 进程优先级详解(prio、static_prio、normal_prio、rt_priority)
    Cuteftp连接虚拟机Centos7
    Linux内核学习笔记(5)-- 进程调度概述
    Linux内核学习笔记(4)-- wait、waitpid、wait3 和 wait4
    Linux内核学习笔记(3)-- 进程的创建和终结
    Linux内核学习笔记(2)-- 父进程和子进程及它们的访问方法
    Linux内核学习笔记(1)-- 进程管理概述
    汇编基础--标识符、标号、伪指令和指令
    JAVA学习笔记--正则表达式
    JAVA学习笔记--字符串概述
  • 原文地址:https://www.cnblogs.com/xk920/p/10749849.html
Copyright © 2011-2022 走看看