iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java单机环境怎么实现定时任务
  • 937
分享到

Java单机环境怎么实现定时任务

2023-06-30 07:06:50 937人浏览 独家记忆
摘要

这篇文章主要介绍“Java单机环境怎么实现定时任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java单机环境怎么实现定时任务”文章能帮助大家解决问题。定时任务框架TimeTask从我们开始学习j

这篇文章主要介绍“Java单机环境怎么实现定时任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java单机环境怎么实现定时任务”文章能帮助大家解决问题。

定时任务框架

Java单机环境怎么实现定时任务

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@Componentpublic 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单机环境怎么实现定时任务”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

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

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java单机环境怎么实现定时任务
    这篇文章主要介绍“Java单机环境怎么实现定时任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java单机环境怎么实现定时任务”文章能帮助大家解决问题。定时任务框架TimeTask从我们开始学习j...
    99+
    2023-06-30
  • Java单机环境实现定时任务技术
    目录前言定时任务框架TimeTaskScheduledExecutorServiceSpring Task结语前言 开发的系统中过程,会有如下的需求: 凌晨生成订单统计报表定时推送文...
    99+
    2024-04-02
  • Java Spring怎么实现定时任务
    本篇内容主要讲解“Java Spring怎么实现定时任务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring怎么实现定时任务”吧!java实现定时任务Jdk自...
    99+
    2023-07-02
  • Java实现定时任务
    本文实例为大家分享了Java实现定时任务的具体代码,供大家参考,具体内容如下 1 使用java.util.Timer 这种方式的定时任务主要用到两个类,Timer 和 TimerTa...
    99+
    2024-04-02
  • Java中怎么实现SpringBoot定时任务
    今天就跟大家聊聊有关Java中怎么实现SpringBoot定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. SpringBoot--任务:定时任务项目开发中经常需要执行一些...
    99+
    2023-06-20
  • 怎么在java中实现定时任务
    这篇文章给大家介绍怎么在java中实现定时任务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允...
    99+
    2023-06-15
  • celery异步定时任务怎么实现订单定时回滚
    这篇文章主要介绍“celery异步定时任务怎么实现订单定时回滚”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“celery异步定时任务怎么实现订单定时回滚”文章能帮助大家解决问题。订单回滚用celer...
    99+
    2023-06-30
  • Java 中怎么实现一个定时任务
    Java 中怎么实现一个定时任务,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实现逻辑:新开一个线程,添加一个 for/ while 死循环,然后在死循环里面添加一个 sl...
    99+
    2023-06-15
  • Java -- 定时任务实现方式
    在Java开发中,定时任务是一种十分常见的功能. 定时任务是在约定时间内执行的一段程序 如每天凌晨24点备份同步数据,又或者电商平台 30 分钟后自动取消未支付的订单,每隔一个小时拉取一次数据等都需要使用到定时器 批量处理数据:批量统计上个...
    99+
    2023-09-09
    Java Quartz Scheduled Xxl-Job
  • Java如何实现定时任务
    今天小编给大家分享一下Java如何实现定时任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、TimerTimer是JAV...
    99+
    2023-07-02
  • SpringBoot定时任务怎么实现
    这篇文章主要讲解了“SpringBoot定时任务怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot定时任务怎么实现”吧!SpringBoot定时任务主要由两个注解完成...
    99+
    2023-06-05
  • python怎么实现定时任务
    这篇文章主要介绍python怎么实现定时任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用Python实现定时任务有些时候我们需要每隔一段时间就要执行一段程序,或者是往复循环执行某一个任务。比如博主在上篇文章讲的爬...
    99+
    2023-06-14
  • node怎么实现定时任务
    本教程操作环境:linux7.3系统、node18.4.0版、Dell G3电脑。node怎么实现定时任务node定时任务(node-schedule模块)实现一个每天凌晨十二点更新服务器上的git代码的功能koa2框架下的app.js文件...
    99+
    2022-11-22
    定时任务 node
  • laravel定时任务怎么实现
    在 Laravel 中,可以使用 Artisan 命令来创建和管理定时任务。以下是如何实现定时任务的步骤: 创建定时任务类:首先,...
    99+
    2024-03-04
    laravel
  • 虚拟主机怎么实现php定时任务
    在虚拟主机上实现 PHP 定时任务有以下几种方式:1. 使用 Linux 服务器的 cron 任务调度器:在虚拟主机的控制面板或者 ...
    99+
    2023-08-17
    虚拟主机 php
  • 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中Quartz高可用定时任务怎么实现
    本篇内容介绍了“Java中Quartz高可用定时任务怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定时任务使用指南如果你想做定时任务...
    99+
    2023-06-29
  • mysql中怎么实现定时任务
    今天就跟大家聊聊有关mysql中怎么实现定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 定时任务 查看event是否开启: show v...
    99+
    2024-04-02
  • 用Python怎么实现定时任务
    本篇文章给大家分享的是有关用Python怎么实现定时任务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、发送消息import smtplibfrom em...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作