通过在以上代码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则表示没有限制)。
本文介绍如何使用Java的Timer类来安排任务定时执行,并探讨了任务执行效率的问题及解决方法,特别是针对长时间运行任务的处理。
1667

被折叠的 条评论
为什么被折叠?



