• schedule与scheduleAtFixedRate比较


    schedule与scheduleAtFixedRate:

    不延时:

      schedule(TimerTask, Date runDate, long period)方法任务不延时----Date类型

     1 import java.util.Calendar;
     2 import java.util.Date;
     3 import java.util.Timer;
     4 import java.util.TimerTask;
     5 
     6 /**
     7  * schedule(TimerTask, Date runDate, long period)方法任务不延时----Date类型
     8  */
     9 public class Test {
    10     
    11     public static class MyTask extends TimerTask{
    12         @Override
    13         public void run() {
    14             try {
    15                 System.out.println("begin timer =" + System.currentTimeMillis());
    16                 Thread.sleep(1000);
    17                 System.out.println("end timer =" + System.currentTimeMillis());
    18             } catch (InterruptedException e) {
    19                 e.printStackTrace();
    20             }
    21         }
    22     }
    23     
    24     /**
    25      * 从运行结果可以看出,当没有延时,则下一次执行任务的开始时间是上一次任务的开始时间加上period时间(循环间隔)
    26      */
    27     public static void main(String[] args) {
    28         MyTask task = new MyTask();
    29         Calendar calendar = Calendar.getInstance();
    30         Date runDate = calendar.getTime();
    31         Timer timer = new Timer();
    32         timer.schedule(task, runDate, 4000);
    33     }
    34 }

      schedule(TimerTask, long delay, long period)方法任务不延时----long类型

     1 import java.util.Timer;
     2 import java.util.TimerTask;
     3 
     4 /**
     5  * schedule(TimerTask, long delay, long period)方法任务不延时----long类型
     6  */
     7 public class Test2 {
     8     
     9     public static class MyTask extends TimerTask{
    10         @Override
    11         public void run() {
    12             try {
    13                 System.out.println("begin timer =" + System.currentTimeMillis());
    14                 Thread.sleep(1000);
    15                 System.out.println("end timer =" + System.currentTimeMillis());
    16             } catch (InterruptedException e) {
    17                 e.printStackTrace();
    18             }
    19         }
    20     }
    21     
    22     /**
    23      *         从运行结果可以看出,当没有延时,则第一次执行任务的时间是任务的开始时间加上delay(延迟时间),
    24      *         接下来执行任务的时间是上一次任务的开始时间加上period(循环间隔时间)
    25      */
    26     public static void main(String[] args) {
    27         MyTask task = new MyTask();
    28         System.out.println("当前时间为:" + System.currentTimeMillis());
    29         Timer timer = new Timer();
    30         timer.schedule(task, 3000, 4000);
    31     }
    32 }

      scheduleAtFixedRate(TimerTask, Date runDate, long period)方法任务不延时----Date类型

     1 import java.util.Calendar;
     2 import java.util.Date;
     3 import java.util.Timer;
     4 import java.util.TimerTask;
     5 
     6 /**
     7  * scheduleAtFixedRate(TimerTask, Date runDate, long period)方法任务不延时----Date类型
     8  */
     9 public class Test {
    10     
    11     public static class MyTask extends TimerTask{
    12         @Override
    13         public void run() {
    14             try {
    15                 System.out.println("begin timer =" + System.currentTimeMillis());
    16                 Thread.sleep(1000);
    17                 System.out.println("end timer =" + System.currentTimeMillis());
    18             } catch (InterruptedException e) {
    19                 e.printStackTrace();
    20             }
    21         }
    22     }
    23     
    24     /**
    25      * 从运行结果可以看出,当没有延时,则下一次执行任务的时间是上一次任务的开始时间加上period时间(循环间隔)
    26      */
    27     public static void main(String[] args) {
    28         MyTask task = new MyTask();
    29         Calendar calendar = Calendar.getInstance();
    30         Date runDate = calendar.getTime();
    31         Timer timer = new Timer();
    32         timer.scheduleAtFixedRate(task, runDate, 4000);
    33     }
    34 }

      scheduleAtFixedRate(TimerTask, long delay, long period)方法任务不延时----long类型

     1 import java.util.Timer;
     2 import java.util.TimerTask;
     3 
     4 /**
     5  * scheduleAtFixedRate(TimerTask, long delay, long period)方法任务不延时----long类型
     6  */
     7 public class Test2 {
     8     
     9     public static class MyTask extends TimerTask{
    10         @Override
    11         public void run() {
    12             try {
    13                 System.out.println("begin timer =" + System.currentTimeMillis());
    14                 Thread.sleep(1000);
    15                 System.out.println("end timer =" + System.currentTimeMillis());
    16             } catch (InterruptedException e) {
    17                 e.printStackTrace();
    18             }
    19         }
    20     }
    21     
    22     /**
    23      *     从运行结果可以看出,当没有延时,如果执行任务的时间没有被延时,则第一次执行任务的时间是任务的开始时间加上delay(延迟时间),
    24      *     接下来执行任务的时间是上一次任务的开始时间加上period(循环间隔时间)
    25      */
    26     public static void main(String[] args) {
    27         MyTask task = new MyTask();
    28         System.out.println("当前时间为:" + System.currentTimeMillis());
    29         Timer timer = new Timer();
    30         timer.scheduleAtFixedRate(task, 3000, 4000);
    31     }
    32 }

    延迟:

      schedule(TimerTask, Date runDate, long period)方法 任务延时----Date类型

     1 import java.util.Calendar;
     2 import java.util.Date;
     3 import java.util.Timer;
     4 import java.util.TimerTask;
     5 
     6 /**
     7  * schedule(TimerTask, Date runDate, long period)方法 任务延时----Date类型
     8  */
     9 public class Test3 {
    10     
    11     public static class MyTask extends TimerTask{
    12         @Override
    13         public void run() {
    14             try {
    15                 System.out.println("begin timer =" + System.currentTimeMillis());
    16                 Thread.sleep(5000);
    17                 System.out.println("end timer =" + System.currentTimeMillis());
    18             } catch (InterruptedException e) {
    19                 e.printStackTrace();
    20             }
    21         }
    22     }
    23     
    24     /**
    25      * 从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,则下一次任务的执行时间是上一次任务结束时的时间作为参考计算
    26      */
    27     public static void main(String[] args) {
    28         MyTask task = new MyTask();
    29         Calendar calendar = Calendar.getInstance();
    30         Date runDate = calendar.getTime();
    31         Timer timer = new Timer();
    32         timer.schedule(task, runDate, 2000);
    33     }
    34 }

      schedule(TimerTask, long delay, long period)方法任务延时----long类型

     1 import java.util.Timer;
     2 import java.util.TimerTask;
     3 
     4 /**
     5  * schedule(TimerTask, long delay, long period)方法
     6  *         任务延时----long类型
     7  */
     8 public class Test4 {
     9     
    10     public static class MyTask extends TimerTask{
    11         @Override
    12         public void run() {
    13             try {
    14                 System.out.println("begin timer =" + System.currentTimeMillis());
    15                 Thread.sleep(5000);//延时5秒
    16                 System.out.println("end timer =" + System.currentTimeMillis());
    17             } catch (InterruptedException e) {
    18                 e.printStackTrace();
    19             }
    20         }
    21     }
    22     
    23     /**
    24      *     从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,那么下一次任务的执行时间是上一次任务结束时的时间作为参考计算
    25      */
    26     public static void main(String[] args) {
    27         MyTask task = new MyTask();
    28         System.out.println("当前时间为:" + System.currentTimeMillis());
    29         Timer timer = new Timer();
    30         timer.schedule(task, 3000, 2000);
    31     }
    32 }

      scheduleAtFixedRate(TimerTask, Date runDate, long period)方法 任务延时----Date类型

     1 import java.util.Calendar;
     2 import java.util.Date;
     3 import java.util.Timer;
     4 import java.util.TimerTask;
     5 
     6 /**
     7  * scheduleAtFixedRate(TimerTask, Date runDate, long period)方法 任务延时----Date类型
     8  */
     9 public class Test3 {
    10     
    11     public static class MyTask extends TimerTask{
    12         @Override
    13         public void run() {
    14             try {
    15                 System.out.println("begin timer =" + System.currentTimeMillis());
    16                 Thread.sleep(5000);
    17                 System.out.println("end timer =" + System.currentTimeMillis());
    18             } catch (InterruptedException e) {
    19                 e.printStackTrace();
    20             }
    21         }
    22     }
    23     
    24     /**
    25      * 从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,则下一次任务的执行时间是上一次任务结束时的时间作为参考计算
    26      */
    27     public static void main(String[] args) {
    28         MyTask task = new MyTask();
    29         Calendar calendar = Calendar.getInstance();
    30         Date runDate = calendar.getTime();
    31         Timer timer = new Timer();
    32         timer.scheduleAtFixedRate(task, runDate, 2000);
    33     }
    34 }

      scheduleAtFixedRate(TimerTask, long delay, long period)方法任务延时----long类型

     1 import java.util.Timer;
     2 import java.util.TimerTask;
     3 
     4 /**
     5  * scheduleAtFixedRate(TimerTask, long delay, long period)方法
     6  *         任务延时----long类型
     7  */
     8 public class Test4 {
     9     
    10     public static class MyTask extends TimerTask{
    11         @Override
    12         public void run() {
    13             try {
    14                 System.out.println("begin timer =" + System.currentTimeMillis());
    15                 Thread.sleep(5000);//延时5秒
    16                 System.out.println("end timer =" + System.currentTimeMillis());
    17             } catch (InterruptedException e) {
    18                 e.printStackTrace();
    19             }
    20         }
    21     }
    22     
    23     /**
    24      *     从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,那么下一次任务的执行时间是上一次任务结束时的时间作为参考计算
    25      */
    26     public static void main(String[] args) {
    27         MyTask task = new MyTask();
    28         System.out.println("当前时间为:" + System.currentTimeMillis());
    29         Timer timer = new Timer();
    30         timer.scheduleAtFixedRate(task, 3000, 2000);
    31     }
    32 }

     

    测试schedule()方法不具有追赶执行性:

     1 import java.util.Calendar;
     2 import java.util.Date;
     3 import java.util.Timer;
     4 import java.util.TimerTask;
     5 
     6 public class Test {
     7 
     8     public static class MyTask extends TimerTask {
     9         @Override
    10         public void run() {
    11             System.out.println("begin timer:" + new Date());
    12             System.out.println("end timer:" + new Date());
    13         }
    14     }
    15     
    16     /**
    17      *     测试schedule()方法不具有追赶执行性
    18      *         也就是如果计划时间在当前时间之前,那么当运行程序时,任务从当前时间开始执行,
    19      *         计划时间到当前之间这段时间的任务就被取消了,不被执行,也就是任务不追赶
    20      */
    21     public static void main(String[] args) {
    22         MyTask task = new MyTask();
    23         System.out.println("现在执行时间:" + new Date());
    24         Calendar calendar = Calendar.getInstance();
    25         calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)-20);
    26         Date runDate = calendar.getTime();
    27         System.out.println("计划执行时间为:" + runDate);
    28         Timer timer = new Timer();
    29         timer.schedule(task, runDate, 2000);
    30     }
    31 }

    测试scheduleAtFixedRate()方法具有追赶执行性:

     1 import java.util.Calendar;
     2 import java.util.Date;
     3 import java.util.Timer;
     4 import java.util.TimerTask;
     5 
     6 public class Test2 {
     7 
     8     public static class MyTask extends TimerTask {
     9         @Override
    10         public void run() {
    11             System.out.println("begin timer:" + new Date());
    12             System.out.println("end timer:" + new Date());
    13         }
    14     }
    15     
    16     /**
    17      *     测试scheduleAtFixedRate()方法具有追赶执行性
    18      *         从运行结果可以看到,计划执行时间和当前时间之间对应的任务被补充性的执行,这就是task任务追赶特性
    19      *         白话就是虽然时间过了,但是任务会在当前被补充执行完
    20      */
    21     public static void main(String[] args) {
    22         MyTask task = new MyTask();
    23         System.out.println("现在执行时间:" + new Date());
    24         Calendar calendar = Calendar.getInstance();
    25         calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)-20);
    26         Date runDate = calendar.getTime();
    27         System.out.println("计划执行时间为:" + runDate);
    28         Timer timer = new Timer();
    29         timer.scheduleAtFixedRate(task, runDate, 2000);
    30     }
    31 }
  • 相关阅读:
    修改mysql密码的四种方法
    phpcms模板生成原理
    如何给虚拟主机安装phpMyAdmin
    如何修改数据库密码
    web 服务器、PHP、数据库、浏览器是如何实现动态网站的
    编写shell时,提示let/typeset:not found
    Linux下采用VI编辑器删除复制或移动多行文本内容
    BASH 学习笔记小结
    list容器的C++代码实现
    Groovy入门教程
  • 原文地址:https://www.cnblogs.com/wang1001/p/9582617.html
Copyright © 2020-2023  润新知