返回顶部
首页 > 资讯 > 后端开发 > Python >Java单机环境实现定时任务技术
  • 154
分享到

Java单机环境实现定时任务技术

2024-04-02 19:04:59 154人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言定时任务框架TimeTaskScheduledExecutorServicespring Task结语前言 开发的系统中过程,会有如下的需求: 凌晨生成订单统计报表定时推送文

前言

开发的系统中过程,会有如下的需求:

  • 凌晨生成订单统计报表
  • 定时推送文章、发送邮件
  • 每隔5分钟动态抓取数据更新
  • 每晚定时计算用户当日收益情况并推送给用户
  • .....

通常这些需求我们都是通过定时任务来实现,列举了java中一些常用的的定时任务框架。

定时任务框架

图片.png

TimeTask

从我们开始学习java开始,最先实现定时任务的时候都是采用TimeTask, Timer内部使用TaskQueue的类存放定时任务,它是一个基于最小堆实现的优先级队列。TaskQueue会按照任务距离下一次执行时间的大小将任务排序,保证在堆顶的任务最先执行。

实例代码:

 public static void main(String[] args)
    {
          TimerTask task = new TimerTask() {
              public void run() {
                  System.out.println("当前时间: " + new Date() + "n" +
                          "线程名称: " + Thread.currentThread().getName());
              }
          };
          Timer timer = new Timer("Timer");
          long delay = 5000L;
          timer.schedule(task, delay);
          System.out.println("当前时间: " + new Date() + "n" +
                  "线程名称: " + Thread.currentThread().getName());
    }

运行结果:

当前时间: Wed Apr 06 22:05:04 CST 2022n线程名称: main
当前时间: Wed Apr 06 22:05:09 CST 2022n线程名称: Timer
复制代码

从结果可以看出,5秒后执行了定时任务。

缺点:

  • TimeTask执行任务只能串行执行,一旦一个任务执行的时间比较长的话将会影响其他任务执行
  • 执行任务过程如果发生异常,任务会直接停止。

随着时间的推移,java的技术也在不断的更新,针对TimeTask的不足,ScheduledExecutorService出现替代了TimeTask。

ScheduledExecutorService

ScheduledExecutorService是一个接口,有多个实现类,比较常用的是ScheduledThreadPoolExecutor。而ScheduledThreadPoolExecutor本身就是一个线程池,其内部使用 DelayQueue 作为任务队列,并且支持任务并发执行。

实例代码:

 public static void main(String[] args) throws InterruptedException
   {
      ScheduledExecutorService executorService =
              Executors.newScheduledThreadPool(3);
      // 执行任务: 每 10秒执行一次
      executorService.scheduleAtFixedRate(() -> {
          System.out.println("执行任务:" + new Date()+",线程名称: " + Thread.currentThread().getName());
      }, 1, 10, TimeUnit.SECONDS);
    }

缺点:

  • 尽量避免用Executors方式去创建线程池,因为jdk自带线程池内部使用的的队列的比较大,很容易出现OOM。
  • 定时任务是基于JVM单机内存形式的,一旦重启定时任务就消失了。
  • 无法支持cron表达式实现丰富的定时任务。

Spring Task

学习了Spring之后,开始使用了Spring 自带的Task。Spring Framework 自带定时任务,提供了 cron 表达式来实现丰富定时任务配置。

实例代码:

@EnableScheduling
@Component
public class SpringTask
{
    private Logger logger = LoggerFactory.getLogger(SpringTask.class);
    private static final SimpleDateFORMat dateFormat = new SimpleDateFormat(
            "HH:mm:ss");
    
    @Scheduled(fixedRate = 5000)
    public void invokeTaskWithFixedRate()
    {
        logger.info("Fixed Rate Task :  Current Time  is  {}",
                dateFormat.format(new Date()));
    }
    
    @Scheduled(fixedDelay = 2000)
    public void invokeTaskWithFixedDelay()
    {
        try
        {
            TimeUnit.SECONDS.sleep(3);
            logger.info("Fixed Delay Task : Current Time  is  {}",
                    dateFormat.format(new Date()));
        }
        catch (InterruptedException e)
        {
            logger.error("invoke task error",e);
        }
    }
    
    @Scheduled(initialDelay = 5000, fixedRate = 5000)
    public void invokeTaskWithInitialDelay()
    {
        logger.info("Task with Initial Delay : Current Time is  {}",
                dateFormat.format(new Date()));
    }
    
    @Scheduled(cron = "0/5 * * * * ? ")
    public void invokeTaskWithCronExpression()
    {
        logger.info("Task Cron Expression:  Current Time  is  {}",
                dateFormat.format(new Date()));
    }
}

执行结果:

2022-04-06 23:06:20.945  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Task Cron Expression:  Current Time  is  23:06:20
2022-04-06 23:06:22.557  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Task with Initial Delay : Current Time is  23:06:22
2022-04-06 23:06:22.557  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Fixed Rate Task :  Current Time  is  23:06:22
2022-04-06 23:06:25.955  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Fixed Delay Task : Current Time  is  23:06:25
2022-04-06 23:06:25.955  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Task Cron Expression:  Current Time  is  23:06:25
2022-04-06 23:06:27.555  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Task with Initial Delay : Current Time is  23:06:27
2022-04-06 23:06:27.556  INFO 14604 --- [   scheduling-1] com.fw.task.SpringTask                   : Fixed Rate Task :  Current Time  is  23:06:27

@EnableScheduling需要开启定时任务,@Scheduled(cron = "0/5 * * * * ?")配置定时任务的规则。cron表达式支持丰富定时任务配置,不熟悉的的可以查看

优点:

使用简单方便,支持各种复杂的定时任务配置

缺点:

  • 基于单机形式定时任务,一旦重启定时任务就消失了。
  • 定时任务默认是单线程执行任务,如果需要并行执行需要开启@EnableAsync。
  • 没有统一的图形化任务调度的管理,无法控制定时任务

结语

任何技术的出现都有它的价值,技术没有最好的,只有最合适的。我们要针对不同的需求选择最合适的技术,切莫过度架构设计。本文讲解了单机环境实现定时任务的技术,

到此这篇关于Java单机环境实现定时任务技术的文章就介绍到这了,更多相关Java定时任务框架内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java单机环境实现定时任务技术

本文链接: https://lsjlt.com/news/146717.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java单机环境实现定时任务技术
    目录前言定时任务框架TimeTaskScheduledExecutorServiceSpring Task结语前言 开发的系统中过程,会有如下的需求: 凌晨生成订单统计报表定时推送文...
    99+
    2024-04-02
  • Java单机环境怎么实现定时任务
    这篇文章主要介绍“Java单机环境怎么实现定时任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java单机环境怎么实现定时任务”文章能帮助大家解决问题。定时任务框架TimeTask从我们开始学习j...
    99+
    2023-06-30
  • Java 定时任务技术趋势详情
    目录Java 中自带的解决方案Spring 中自带的解决方案业务幂等解决方案开源任务调度中间件企业级解决方案定时任务技术趋势简介:定时任务是每个业务常见的需求,比如每分钟扫描超时支付...
    99+
    2024-04-02
  • Java实现定时任务
    本文实例为大家分享了Java实现定时任务的具体代码,供大家参考,具体内容如下 1 使用java.util.Timer 这种方式的定时任务主要用到两个类,Timer 和 TimerTa...
    99+
    2024-04-02
  • PHP中的定时任务和计划任务技术
    在PHP中,有两种常见的定时任务和计划任务技术:使用Cron调度和使用操作系统级别的任务调度。1. 使用Cron调度:Cron是一个...
    99+
    2023-08-24
    PHP
  • Java -- 定时任务实现方式
    在Java开发中,定时任务是一种十分常见的功能. 定时任务是在约定时间内执行的一段程序 如每天凌晨24点备份同步数据,又或者电商平台 30 分钟后自动取消未支付的订单,每隔一个小时拉取一次数据等都需要使用到定时器 批量处理数据:批量统计上个...
    99+
    2023-09-09
    Java Quartz Scheduled Xxl-Job
  • Java如何实现定时任务
    今天小编给大家分享一下Java如何实现定时任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、TimerTimer是JAV...
    99+
    2023-07-02
  • Java实现定时任务最简单的3种方法
    目录一、Timer二、ScheduledExecutorService三、Spring Task1、开启定时任务2、添加定时任务Cron 表达式知识扩展:分布式定时任务1、ZSet ...
    99+
    2024-04-02
  • Java 定时任务-最简单的3种实现方法
     一、Timer Timer是JAVA自带的定时任务类,实现如下: public class MyTimerTask {     public static void main(String[] args) {         ...
    99+
    2023-09-02
    java Java 定时任务 Spring 定时任务 java 定时任务 spring 定时任务
  • Java Spring怎么实现定时任务
    本篇内容主要讲解“Java Spring怎么实现定时任务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring怎么实现定时任务”吧!java实现定时任务Jdk自...
    99+
    2023-07-02
  • 怎么在java中实现定时任务
    这篇文章给大家介绍怎么在java中实现定时任务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允...
    99+
    2023-06-15
  • Java中怎么实现SpringBoot定时任务
    今天就跟大家聊聊有关Java中怎么实现SpringBoot定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. SpringBoot--任务:定时任务项目开发中经常需要执行一些...
    99+
    2023-06-20
  • Python实现定时任务
    Python下实现定时任务的方式有很多种方式。下面介绍几种 循环sleep: 这是一种最简单的方式,在循环里放入要执行的任务,然后sleep一段时间再执行。缺点是,不容易控制,而且sleep是个阻塞函数。...
    99+
    2022-06-04
    Python
  • PHP开发技术在Windows环境下如何实现重定向?
    重定向是Web开发中常用的一种技术,它可以将用户请求的URL重定向到另一个URL,以实现页面跳转、防止页面重复提交等功能。在PHP开发中,实现重定向也是非常常见的操作。本文将介绍在Windows环境下如何使用PHP实现重定向。 一、hea...
    99+
    2023-06-14
    开发技术 windows 重定向
  • celery异步定时任务怎么实现订单定时回滚
    这篇文章主要介绍“celery异步定时任务怎么实现订单定时回滚”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“celery异步定时任务怎么实现订单定时回滚”文章能帮助大家解决问题。订单回滚用celer...
    99+
    2023-06-30
  • Java 实现定时任务的三种方法
    目录1、 sleep 2、Timer 3、ScheduledExecutorService 总结 是的,不用任何框架,用我们朴素的 Java 编程语言就能实现定时任务。 今天,栈长就...
    99+
    2024-04-02
  • Java 中怎么实现一个定时任务
    Java 中怎么实现一个定时任务,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实现逻辑:新开一个线程,添加一个 for/ while 死循环,然后在死循环里面添加一个 sl...
    99+
    2023-06-15
  • Java实现定时任务的示例代码
    目录xxl-job官网引入依赖配置信息(application.properties)配置类(XxlJobConfiguration)调用xxl-job-admin模块的接口添加调度...
    99+
    2022-11-21
    Java实现定时任务 Java定时任务 Java 定时
  • java实现周期性执行(定时任务)
    最近是遇到一个设备在线离线的判定问题,设计是每个多长时间(常规的定时任务)检测一次设备是否在前,当检测到里离线时,我们不能立马判断为离线,而是要在重试多测几次,只要一次成功就返回判定...
    99+
    2024-04-02
  • Java实现定时任务的方法详解
    目录前言定时任务是什么定时任务的有哪些是实现方式纯手写单线程循环Timer 和它的小伙伴ScheduledExecutorServiceSpring 提供的定时任务总结前言 学过定时...
    99+
    2022-11-13
    Java实现定时任务 Java定时任务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作