• Java定时任务工具详解之Timer篇


    Java定时任务调度工具详解

    什么是定时任务调度?

    ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务。

    在Java中的定时调度工具?

    ◆ Timer       ◆Quartz

    Timer和Quarzt的区别?

    ◆ 出身不同(Timer由JDK直接提供,调用方式简单粗暴,不需要别的jar支持)

    ◆ 能力区别(TImer简单的定时任务,如需要每个星期天的8点,则需要Quarzt)

    ◆ 底层机制

     

    Timer简介

    Timer的定义:

    有且仅有一个后台线程对多个业务线程进行定时定频率的调度。

    主要构件:

    第二部分 Timer实战演练

    通过程序来讲解Timer

     1 package cn.springbook.timer;
     2 
     3 import java.util.TimerTask;
     4 
     5 public class MyTimerTask extends TimerTask {
     6 
     7     private String name;
     8     
     9     // 构造方法
    10     public MyTimerTask(String name) {
    11         this.name = name;
    12     }
    13 
    14     public void run() {
    15         // 打印当前name的值
    16         System.out.println("Current exec name is:" + this.name);
    17     }
    18 
    19 }
     1 package cn.springbook.timer;
     2 
     3 import java.util.Timer;
     4 
     5 public class MyTimer {
     6     public static void main(String[] args) {
     7         // 1、创建一个timer实例
     8         Timer timer = new Timer();
     9         // 2、创建一个MyTimerTask实例
    10         MyTimerTask myTimerTask = new MyTimerTask("No.1");
    11         // 3、通过timer定时定频率调用myTimerTask的业务逻辑
    12         // 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次
    13         timer.schedule(myTimerTask, 2000L, 1000L);
    14     }
    15 }

    Timer的定时调度函数

    schedule的四种用法

    scheduleAtFixedRate的两种用法

    schedule的四种用法:

    schedule(task, time)

    参数

    task -  所要安排的任务

    time - 执行任务的时间

    作用:在时间等于或超过time的时候执行且仅执行一次task

     1 package cn.springbook.timer;
     2 
     3 import java.text.DateFormat;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Calendar;
     6 import java.util.TimerTask;
     7 
     8 public class MyTimerTask extends TimerTask {
     9 
    10     private String name;
    11     
    12     // 构造方法
    13     public MyTimerTask(String name) {
    14         this.name = name;
    15     }
    16 
    17     public void run() {
    18         
    19         Calendar calendar = Calendar.getInstance();
    20         DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    21         System.out.println("Current exec time is:" + format.format(calendar.getTime()));
    22         // 打印当前name的值
    23         System.out.println("Current exec name is:" + this.name);
    24     }
    25 
    26     public String getName() {
    27         return name;
    28     }
    29 
    30     public void setName(String name) {
    31         this.name = name;
    32     }
    33     
    34     
    35 
    36 }
     1 package cn.springbook.timer;
     2 
     3 import java.text.DateFormat;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Calendar;
     6 import java.util.Timer;
     7 
     8 public class MyTimer {
     9     public static void main(String[] args) {
    10         // 1、创建一个timer实例
    11         Timer timer = new Timer();
    12         // 2、创建一个MyTimerTask实例
    13         MyTimerTask myTimerTask = new MyTimerTask("No.1");
    14         
    15         Calendar calendar = Calendar.getInstance();
    16         DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    17         System.out.println("Current exec time is:" + format.format(calendar.getTime()));
    18         calendar.add(Calendar.SECOND, 3);
    19         /**
    20          * 在时间等于或超过time的时候执行且执行一次task
    21          * 如在2016-11-11 00:00:00执行一次task,打印任务名字
    22          */
    23         myTimerTask.setName("schedule1");
    24         timer.schedule(myTimerTask, calendar.getTime());
    25     }
    26 }

    schedule(task, time, period)

    参数

    task - 所要安排的任务

    time - 首次执行任务的时间

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

    1 /**
    2  * 在时间等于或超过time的时候执行且执行一次task
    3  * 如在2016-11-11 00:00:00执行一次task,打印任务名字
    4  * 之后每隔两秒执行一次task
    5  */
    6 myTimerTask.setName("schedule2");
    7 timer.schedule(myTimerTask, calendar.getTime(), 2000);

    schedule(task, delay)

    参数

    task - 所要安排的任务

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

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

    1 /**
    2  * 等待delay毫秒后执行且仅执行一次task
    3  * 如现在是2016-11-11 00:00:00
    4  * 则在2016-11-11 00:00:01执行一次task,打印任务名字
    5  * 之后每隔1秒执行一次task
    6  */
    7 myTimerTask.setName("schedule3");
    8 timer.schedule(myTimerTask, 1000);


     

    schedule(task, delay, period)

    参数

    task  - 所要安排的任务

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

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

    作用:

      等待delay毫秒后首次执行task

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

    1 /**
    2  * 等待delay毫秒后执行且仅执行一次task
    3  * 如现在是2016-11-11 00:00:00
    4  * 则在2016-11-11 00:00:01执行一次task,打印任务名字
    5  * 之后每隔2秒执行一次task
    6  */
    7 myTimerTask.setName("schedule4");
    8 timer.schedule(myTimerTask, 3000, 1000);


    scheduleAtFixedRate的两种用法

    scheduleAtFixedRate(task, time, period)

    参数

    task - 所要安排的任务

    time - 首次执行任务的时间

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

    作用: 

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

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

    1 /**
    2  * 在时间等于或超过time的时候首次执行一次task
    3  * 之后每隔period毫秒重复执行异一次task
    4  * 如在2016-11-11 00:00:00执行一次task,打印任务名字
    5  * 之后每隔两秒执行一次task
    6  */
    7 myTimerTask.setName("scheduleAtFixedRate1");
    8 timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(), 2000);

    scheduleAtFixedRate(task, delay, period)

    参数

    task  - 所要安排的任务

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

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

    作用: 

      等待delay毫秒后首次执行task

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

    1 /**
    2  * 等待delay毫秒后执行且仅执行一次task
    3  * 之后每隔period毫秒重复执行异一次task
    4  * 如在2016-11-11 00:00:00执行一次task,打印任务名字
    5  * 之后每隔两秒执行一次task
    6  */
    7 myTimerTask.setName("scheduleAtFixedRate2");
    8 timer.scheduleAtFixedRate(myTimerTask, 1000, 2000);
  • 相关阅读:
    Responder一点也不神秘————iOS用户响应者链完全剖析
    loadView、viewDidLoad及viewDidUnload的关系
    iOS 离屏渲染的研究
    CoreData处理海量数据
    《驾驭Core Data》
    为什么都要在主线程中更新UI
    快速排序OC实现和快排思想找第n大的数(原创)
    最新版SDWebImage的使用
    UIViewContentMode各类型效果
    iOS 8 自适应 Cell
  • 原文地址:https://www.cnblogs.com/caifenglin/p/9604462.html
Copyright © 2020-2023  润新知