Java实现定时任务的三种方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java实现定时任务的三种方法

在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行垃圾回收(译者注:个人觉得用定时任务来跑垃圾回收不是很好的例子,从译者接触到的项目来看,比较常见的是用定时任务来进行非实时计算,清除临时数据、文件等)。   在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实普通thread 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:public static void testThread(){ final long timeInterval=1000; Runnable runnable=new Runnable() { @Override public void run() { while(true){ System.out.println(Hello Thread); try { Thread.sleep(timeInterval); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Thread thread=new Thread(runnable); thread.start(); } 二用Timer和TimerTask   上面的实现是非常快速简便的,但它也缺少一些功能。   用Timer和TimerTask的话与上述方法相比有如下好处: 当启动和去取消任务时可以控制 第一次执行任务时可以指定你想要的delay时间   在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。   Timer实例可以调度多任务,它是线程安全的。   当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务。 下面是代码:public static void testTimer(){ TimerTask task=new TimerTask() { @Override public void run() { System.out.println(Hello Timer); } }; Timer timer=new Timer(); long delay=0; long intervalPeriod=1*1000; timer.scheduleAtFixedRate(task, delay, intervalPeriod); } 这些类从JDK 1.3开始存在。scheduleAtFixedRate public void scheduleAtFixedRate(TimerTask?task, Date?firstTime, long?period) 安排指定的任务在指定的时间开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。 在固定速率执行中,相对于已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多次执行,从而使后续执行能够赶上来。从长远来看,执行的频率将正好是指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。 固定速率执行适用于那些对绝对 时间敏感的重复执行活动,如每小时准点打钟报时,或者在每天的特定时间运行已安排的维护活动。它还适用于那些完成固定次数执行的总计时间很重要的重复活动,如倒计时的计时器,每秒钟滴答一次,共 10 秒钟。最后,固定速率执行适用于安排多次重复执行的计时器任务,这些任务相互之间必须保持同步。 参数: task - 所要安排的任务。 firstTime - 首次执行任务的时间。 period - 执行各后续任务之间的时间间隔,单位是毫秒。 抛出: IllegalArgumentException - 如果 time.getTime() 是负数。 IllegalStateException - 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。 ScheduledExecutorService   ScheduledExecutorService是从Java SE

文档评论(0)

peain + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档