网站项目报价方案,logo在线设计制作,公共服务网站系统建设方案,盐城网站建设0515icp由于项目开发的需要#xff0c;必须实现让一个Java程序定时运行。比如#xff0c;我的项目中#xff0c;有一个网络蜘蛛#xff0c;需要从互联网上抓取数据#xff0c;与其配合#xff0c;有另一个程序来对新抓取的页面进行索引的创建#xff0c;由于数据源更新频率不高…由于项目开发的需要必须实现让一个Java程序定时运行。比如我的项目中有一个网络蜘蛛需要从互联网上抓取数据与其配合有另一个程序来对新抓取的页面进行索引的创建由于数据源更新频率不高我们不可能让蜘蛛无休无止地工作或者忙等待新数据的产生那样只能造成浪费而且非常地不礼貌所以最理想的情况是让它每隔一个小时运行一次这样一天也就运行不了几次。那么如何才能实现让一个Java程序定时运行呢Java基本类库里面提供了两个工具供我们使用它们是java.util.Timer和java.util.TimerTask。Timer是一个对象这个对象在初始化之初会创建一个后台进程(TimerThread)同时创建一个任务队列(TaskQueue)然后后台进程开始检测TaskQueue中是否存在等待调度的任务如果存在就运行之如果不存在就等待(Object.wait())。对于程序员可见的类是Timer和TimerTaskTimerTask是一个抽象类是能够被Timer所调度的一种对象所有希望定时执行的任务只要实现TimerTask类即可然后使用Timer的schedule方法给定一定的参数即可实现定时执行或者周期执行。schedule方法的本质是将一个TimerTask对象添加到了TaskQueue中这个TaskQueue是一个堆(可以动态增长)可以管理很多的Task。Timer的本质就是一个线程按照指定的时间顺序来顺次执行一个又一个的任务根据这种性质我们可以知道Timer实现的定时不可能准确而且还会收到任务本身耗费时间的干扰。如果前一个任务执行时间过长超过后一个任务的启动时间则后一个任务的启动时间必然要顺延。所以这种方法只能用于任务短小且对时间精度要求不高的语境。Timer是线程安全的可以实现并发访问。