java调度:(二)在项目中调度策略的选择

目前的两个项目中,用到大部分的任务调度,有一些思考简单写下来.

一. 如果当前的任务调度很简单,例如:管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务"),那么可以选择Timer 和 scheduledExecutor, 因为scheduledExecutor在JDK1.5才有的,所以如果JDK太老,那只能使用Timer了,但至从JDK1.5之后,建议采用ScheduledExecutorService。,因为Timer是单线程执行任务,即不管有多少个任务在排队,只有一个任务能执行,在任务执行时有很多不确定性,

具体可见:java调度:(三)Timer中的单线程守护

scheduledExecutor:详细介绍可见:http://ketqi.blog.51cto.com/blog/1130608/687681 

 

二.如果调度比较复杂,则选择quartz,

 

三.如果希望任务即时调度,即生产一个任务马上就做一个任务,那一般使用消息队列.

  前面的任务调度策略,都是估算任务执行时间,例如,源数据从一个DB转存到另外一个DB,一般情况根据数据量估算一个大致的时间,例如,每周六晚上12点进行转存即可,不需要有一条数据就调用转存job去执行,这样的任务调度可以选择Timer\quartz\SchedulerExecutor进行非实时调度.

  但是,有的任务调度是需要实时的,例如我现在的项目有以下几个任务,

  1. 元搜索:在网站上搜索一些有效信息的URL
  2. 采集:根据搜索到的URL进行采集,并提取采集到作品的特征值
  3. 比对:对作品的特征值进行比对
  4. 取证:比对需要维权的项目进行取证

  调度这四个任务时,希望,有一条数据就马上执行,这时就应该用MQ,我们在项目中使用的是apache的ActiveMQ,这样当有一个取证任务时,会被马上执行.未完待续,介绍activeMQ(存储要执行的任务)+Executor(任务消费者)配合使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值