Java定时启动任务以及Heritrix超时处理

本文介绍如何使用Java的Timer类来安排任务定时执行,并探讨了任务执行效率的问题及解决方法,特别是针对长时间运行任务的处理。

 

通过在以上代码run()内写上想定期执行的代码即可。一下是jdk中对Timer类的描述:

public class Timer
   
    extends 
    Object
   

一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

 

运行test部分的代码可知,Timer会等待上一个任务完成了才开始执行下一个任务。所以定期执行的代码要处理好超时问题。例如我定期执行Heritrix怕取任务,但有时Heritrix会‘卡死’在某一个网页上:

信息: Processor: Scheduler --> org.archive.crawler.postprocessor.FrontierScheduler
2011
-5-9 15:31:38 org.archive.crawler.fetcher.FetchHTTP innerProcess
信息: GET http://www.XXXXX.com/XXXXXX/index.htm 200 20909 text/html;charset=GB

经常是执行完信息: Processor: Scheduler --> org.archive.crawler.postprocessor.FrontierScheduler后就一直停住,通过设置<integer name="timeout-seconds">1200</integer>这个参数也没用(如果抓取在规定时间内(秒)没有完成,即使它还正在处理中,也是放弃。),后来处理超时的方法是设置<long name="max-time-sec">600</long>让Heritrix在规定时间内还没结束任务则强制结束(最大时间抓取(秒),如果抓取时间超过该值,则爬虫将停止抓取。如果该值为0则表示没有限制)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值