首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一些定时器的引见

2012-08-31 
一些定时器的介绍在程序中经常有建立定时异步任务的需求,下面介绍几种实现方法:1,使用spring quartz定时器

一些定时器的介绍

在程序中经常有建立定时异步任务的需求,下面介绍几种实现方法:
1,使用spring quartz定时器
Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz。
首先,定义一个执行定时异步任务的类和方法,以MySchedule和其中的perform方法为例,然后在spring-quartz.xml中配置:
????????

 <!-- 配置任务类 --> <bean id="mySchedule" ref="mySchedule"/>  <property name="targetMethod" value="perform"/> </bean> <!-- 配置一个触发器定义触发时间。在Spring配置文件中配置触发器类CronTriggerBean --> <bean id="cronTrigger" ref="task"/>  <property name="cronExpression" value="0 52 10 * * ?"/> </bean> <!-- 配置一个调度器。在Spring配置文件中配置调度器类 SchedulerFactoryBean--> <bean id="startSchedule" lazy-init="false" autowire="no" name="code">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。

?

热点排行