网站首页 > java教程 正文
前言:
定时任务是指按照预定的时间计划执行的任务。它可以在事先设定的时间点触发,也可以按照一定的时间间隔进行定期重复执行。
想要用Java中原生的特性实现定时任务,主要有以下几种常见的手段:
Timer类和TimerTask类
Timer类是Java SE5之前的一个定时器工具类,可用于执行定时任务。TimerTask类则表示一个可调度的任务,通常通过继承该类来实现自己的任务,然后使用Timer.schedule0)方法来安排任务的执行时间。
ScheduledExecutorService类
ScheduledExecutorService是Java SE5中新增的个定时任务执行器,它可以比Timer更精准地执行任务,并支持多个任务并发执行。通对调用ScheduledExecutorService.schedule()或ScheduledExecutorService.scheduleAtFixedRate()方法来安排任务的执行时间。
DelayQueue
DelayQueue是一个带有延迟时间的无界阻塞队列,它的元素必须实现Delayed接口。当从DelayQueue中取出一个元素时,如果其延迟时间还未到达,则会阻塞等待,直到延迟时间到达。因此,我们可以通过将任务封装成实现Delayed接口的元素,将其放入DelayQueue中,再使用一个线程不断地从DelayQueue中取出元素并执行任务,从而实现定时任务的调度。
以上几种方案,相比于xxl-job这种定时任务调度框架来说,他实现起来简单,不须要依赖第三方的调度框架和类库。方案更加轻量级。
当然这个方案也不是没有缺点的,首先,以上方案都是基于IM内存的,需要把定时任务提前放进去,那如果数据量太大的话,可能会导致OOM的问题;另外,基于IM内存的方案,一旦机器重启了,里面的数据就都没有了,所以一般都需要配合数据库的持久化一起用,并且在应用启动的时候也需要做重新加载。
还有就是,现在很多应用都是集群部署的,那么集群中多个实例上的多个任务如何配合是一个很大的问题。
以上是在不引入任何其他第三方框架的情况下可以使用的JDK自带的功能实现定时任务,如果可以引入一些常用的类库,如Spring等,还有以下几种方案:
Spring的@Scheduled注解
Spring框架提供了一个方便的定时任务调度功能,,可以使用@Scheduled注解来实现定时任务。通过在需要执行定时任务的方法上加上@Scheduled注解,并指定执行的时间间隔即可。
Quartz框架
Quartz是一个流行的开源任务调度框架,它支持任务的并发执行和动态调度。通过创建JobDetail和Trigger对象,并将它们交给Scheduler进行调度来实现定时任务。
xxl-job
xxl-job是一款分布式定时任务调度平台,可以实现各种类型的定时任务调度,如定时执行Java代码、调用HTTP接口、执行Shell脚本等。xxl-job采用分布式架构,支持集群部署,可以满足高并发、大数据量的任务调度需求。
Elastic-Job
Elastic-Job是一款分布式任务调度框架,可以实现各种类型的定时任务调4.度,如简单任务、数据流任务、脚本任务、Spring Bean任务等。Elastic-Job提供了丰富的任务调度策略,可以通过配置cron表达式、固定间隔等方式实现定时任务调度。Elastic-Job支持分布式部署,提供了高可用性和灵活的扩展性,可以满足高并发、大数据量的任务调度需求。
总结
用Java的定时任务调度器、Spring框架的定时任务支持,或者使用第三方库如Quartz等。这些工具提供了灵活的方式来安排和管理定时任务的执行时间和频率。
- 上一篇: Java并发学习之定时任务的几种玩法与小结
- 下一篇: Java定时任务的五种创建方式,你都会么?
猜你喜欢
- 2024-09-09 Java 定时器、加密、File类(java定时器时间格式)
- 2024-09-09 100个Java工具类之67:定时执行Timer
- 2024-09-09 JAVA定时器的嵌套实现(java的定时器能不能提供实时保证 可能提前也可能推迟)
- 2024-09-09 Java中分布式定时器实现和原理介绍
- 2024-09-09 Java定时任务——SpringTask(java定时任务的实现方式)
- 2024-09-09 全面了解Java Timer定时器类(java定时器怎么用)
- 2024-09-09 Java多线程19:定时器Timer(java多线程实现方式)
- 2024-09-09 Java中的定时器:java.util.Timer(java中的定时器有哪些)
- 2024-09-09 Java 中如何实现定时任务(java定时任务底层原理)
- 2024-09-09 Java定时任务的五种创建方式,你都会么?
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)