• 20181105 Timer(慕课网)


    定时任务调度

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

    Java中的定时调度工具

    • Timer

    JDK提供,无需引入
    功能简单,能用Timer尽量用

    • Quartz

    需要引入
    功能复杂,Timer不能解决时使用

    Timer的定义

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

    关键类:java.util.Timerjava.util.TimerTask

    Timer的基本使用

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            System.out.println(new Date());
        }
    }, 2000L, 1000L);
    

    重要函数

    Timer

    schedule    // 定时执行
    scheduleAtFixedRate     // 定时执行,某些情况下不同于schedule
    cancel  // 终止此计时器,丢弃所有当前已安排的任务
    purge   // 从此计时器的任务队列中移除所有已取消的任务
    

    TimerTask

    cancel  // 取消当前TimerTask里的任务
    scheduledExecutionTime  // 返回此任务最近实际执行的已安排执行的时间
    
    

    Timer的schedulescheduleAtFixedRate的区别

    1. 首次计划执行的时间早于当前的时间
    • schedule

    "fixed-delay":如果第一次执行时间被delay了,随后的执行时间按照上一次实际执行完成的时间点进行计算

    • scheduleAtFixedRate

    "fixed-rate": 如果第一次执行时间被delay了,随后的执行时间按照上一次开始的时间点进行计算,而且为了赶上进度会多次执行任务,因此TimeTask中的执行体需要考虑同步

    1. 任务执行所需时间超出任务的执行周期间隔
    • schedule

    下一次执行时间相对于上一次实际执行完成的时间点,因此执行时间会不断延后

    • scheduleAtFixedRate

    下一次执行时间相对于上一次开始的时间点,因此执行时间一般不会延后,因此存在并发性

    Timer的缺陷

    • 管理并发任务的缺陷

    Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与逾期不符

    • 当任务抛出异常时的缺陷

    如果TimerTask抛出RuntimeException,Timer会停止所有任务的运行

    Timer的使用禁区

    • 对时效性要求较高的多任务并发作业
    • 对复杂的任务的调度

    参考资料

  • 相关阅读:
    IntelliJ IDEA 2017 注册方法
    WindowsAll下安装与破解IntelliJ IDEA2017
    JPA的一对多映射(双向)关联
    JPA 单向一对多关联关系
    JPA 映射单向多对一的关联关系
    关于数据库主键和外键
    JPA(API)
    X509 文件扩展名
    linux设置支持中文
    wp8安装SSL证书
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/9911946.html
Copyright © 2020-2023  润新知