在程序中经常有建立定时异步任务的需求,下面介绍几种实现方法:
1,使用spring quartz定时器
Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz。
首先,定义一个执行定时异步任务的类和方法,以MySchedule和其中的perform方法为例,然后在spring-quartz.xml中配置:
<!-- 配置任务类 -->
<bean id="mySchedule" class="com.raycloud.quartz.MySchedule"/>
<!-- 定义任务。在Spring配置文件中配置代理类MethodInvokingJobDetailFactoryBean,定义任务的详细信息。 -->
<bean id="task" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="mySchedule"/>
<property name="targetMethod" value="perform"/>
</bean>
<!-- 配置一个触发器定义触发时间。在Spring配置文件中配置触发器类CronTriggerBean -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="task"/>
<property name="cronExpression" value="0 52 10 * * ?"/>
</bean>
<!-- 配置一个调度器。在Spring配置文件中配置调度器类 SchedulerFactoryBean-->
<bean id="startSchedule" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
说明:在调度器中,如果将lazy-init='false'那么容器启动就会执行调度程序。
至此,一个 spring quartz定时器便完成了。
2,使用ScheduledExecutorService类
ScheduledExecutorService接口继承了ExecutorService接口,可安排在给定的延迟后运行或定期执行的命令,它只有一个实现类ScheduledThreadPoolExecutor,其中的scheduleAtFixedRate和scheduleWithFixedDelay方法创建并执行某些在取消前一直定期运行的任务。在程序中经常这样使用:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleWithFixedDelay(taskThread, 1, 20, TimeUnit.SECONDS);
其中taskThread是一个实现了Runnable接口的类TaskThread的对象,在TaskThread,的run方法中执行了所要执行的异步定时任务。
scheduledExecutorService.scheduleWithFixedDelay(taskThread, 1, 20, TimeUnit.SECONDS);
便定义了该任务执行的时间和频率。
3,使用Timer来实现
由于Timer对任务的调度是基于绝对时间的;所有的TimerTask只有一个线程TimerThread来执行,因此同一时刻只有一个TimerTask在执行;任何一个TimerTask的执行异常都会导致Timer终止所有任务;由于基于绝对时间并且是单线程执行,因此在多个任务调度时,长时间执行的任务被执行后有可能导致短时间任务快速在短时间内被执行多次或者干脆丢弃多个任务。
而ScheduledExecutorService克服了上述缺点,因此一般不建议使用timer。
分享到:
相关推荐
### STM32定时器时钟源深度解析 在深入探讨STM32定时器时钟源之前,我们首先简要回顾一下STM32微控制器的基本架构。STM32是一款基于ARM Cortex-M内核的32位微控制器,因其高性能、低功耗及广泛的适用性而广受好评。...
PIC单片机定时器详细介绍 PIC单片机定时器是PIC微控制器内部的一种重要模块,它具有计数器和时钟信号触发的功能。不同的PIC系列单片机配置了不同的定时器/计数器模块,例如PIC17CX系列和PIC18CX系列都配置了44个...
本章主要介绍单片机中断系统和定时器的概念和应用。中断系统是一个非常重要的概念,在单片机中扮演着非常关键的角色。中断系统允许单片机在执行某个任务时,响应其他事件请求,如定时器溢出,并暂时停止当前任务,转...
在RSLogix5000中,定时器指令是实现定时操作的关键元素,它们主要分为三类:延时导通定时器(TON)、延时断开定时器(TOF)和保持型定时器(RTO)。 1. 延时导通定时器(TON) TON指令在输入使能(EN)接通后开始计时,直到...
定时器的资料介绍,全电子文档。
显控PLC定时器指令功能介绍涉及了接通延时定时器(TON)、接通延时记忆定时器(TONR)和断开延时定时器(TOF),同时提及了定时器的不同分辨率,以及如何在编程中正确使用这些定时器。 首先,接通延时定时器(TON)...
较为详细地介绍了MFC定时器的使用方法,希望能对就定时器不是很清楚的朋友有帮助
本篇文章通过对51单片机定时器C语言程序的分析,详细介绍了51单片机定时器的基本原理、工作模式以及如何进行初始化和编程。通过理解这些基础知识,读者可以更好地掌握51单片机定时器的应用技巧。
JS Window对象,对话框,定时器用法介绍pptJS Window对象,对话框,定时器用法介绍ppt
看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,在单片机程序的调试和运行中都有着重要的意义。它的主要功能是在发生软件故障时,通过使器件复位(如果软件未将器件清零)将单片机复位。也可以用于将器件...
本文将详细介绍三种常见的Android定时器机制及其使用区别。 首先,我们来看第一种方式,即通过Handler与线程的`sleep(long)`方法配合。这种方式的核心在于创建一个Handler实例来处理接收到的消息,以及一个实现了...
以下将详细介绍STC15单片机定时器的工作原理、配置方法以及常见应用。 1. **工作原理** 单片机定时器基于内部振荡器提供的时钟信号,通过计数器对时钟脉冲进行计数。当计数值达到预设值时,定时器产生中断,通知...
WinCC中定时器使用方法介绍pdf,WinCC中定时器使用方法介绍
介绍一种多功能可编程定时器介绍一种多功能可编程定时器介绍一种多功能可编程定时器介绍一种多功能可编程定时器介绍一种多功能可编程定时器介绍一种多功能可编程定时器介绍一种多功能可编程定时器介绍一种多功能可...
本文详细介绍了STM32中的普通定时器TIM2至TIM5的时钟来源和计数器模式,并提供了编程步骤。普通定时器的时钟可以源自内部时钟源,也可以是通过引脚或触发输入的外部时钟源。这些时钟源可以配置为向上计数、向下计数...
本文将重点介绍LTE切换过程中涉及的关键定时器,并对其工作原理及参数设置进行详细说明。 #### 1. S1RLOCpre – S1连接准备定时器 S1RLOCpre定时器主要应用于S1接口的切换过程中。当源eNB发送`HANDOVER REQUIRED`...
本文将深入探讨C#中的多媒体定时器,并介绍名为MmTimer的封装库。 多媒体定时器源于Windows API中的 Multimedia Timers API,它提供了一种比系统默认定时器更高的精度,可以达到1毫秒级别。这种高精度使得多媒体...
本文将对mcgs定时器操作函数进行详细的介绍,包括定时器号、 TimerClearOutput函数、TimerRun函数、TimerStop函数、TimerSkip函数、TimerReset函数、TimerValue函数、TimerStr函数、TimerState函数、TimerSetLimit...
### STM32定时器四种同步模式详解 #### 一、定时器作为预分频器模式 ...以上就是STM32定时器四种同步模式的详细介绍及其应用场景。这些模式提供了丰富的配置选项,可以根据不同的应用场景灵活选择合适的同步方式。
CC2430定时器实验手册是一份详细介绍CC2430芯片中4个定时器的使用和编程的文档。CC2430是一款由TI(德州仪器)公司生产,广泛用于ZigBee无线网络通信的SoC(System on Chip,系统级芯片),其内部集成了8051核心和...