科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Spring中使用JDK Timer进行任务调度

在Spring中使用JDK Timer进行任务调度

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作者:闹市孤僧 2007年5月29日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

当Timer中所有的TimerTask已经执行完成并且Timer对象没有外部引用时,Timer的任务执行线程才会结束。但这可能需要很长的时间才会发生。

因此Timer在默认情况下使用非后台线程(daemon Thread),这样你就可以在应用程序中通过Timer#cancel()方法手工结束Timer。如果希望尽快结束Timer中的任务,则可以调用TimerTask#cancel()方法来达到目的。

Timer的构造函数在创建Timer对象的同时,将启动一个Timer背景线程,我们先来了解一下Timer的几个构造函数:

●Timer():创建一个Timer,背景线程是非后台线程;

●Timer(boolean isDaemon):创建一个Timer,背景线程是后台线程,后台线程将在应用程序主线程停止后自动退出,该方法是JDK 5.0新增的;

●Timer(String name):和Timer()类似,只不过通过name为关联背景线程指定了名称;

●Timer(String name, boolean isDaemon):和Timer(boolean isDaemon)类似并为关联背景线程指定名称,该方法是JDK 5.0新增的。

通过以下方法运行一次任务:

●schedule(TimerTask task, Date time):在特定时间点执行一次任务;

●schedule(TimerTask task, long delay):延迟指定时间后,执行一次任务,delay的单位为毫秒。

通过以下方法按固定时间间隔周期性运行任务,任务的执行可能产生时间的漂移:

●schedule(TimerTask task, Date firstTime, long period):从指定时间点开始周期性执行任务,period的单位为毫秒,后一次的执行将在前次执行完成后才开始计时。如任务被安排2秒钟运行一次,当第一次运行花费了1.5秒时,第二次将在3.5秒时运行。所以这种任务调度是固定时间间隔;

●schedule(TimerTask task, long delay, long period):延迟指定时间后,周期性执行任务。

通过以下方法按固定时间间隔运行任务:

●scheduleAtFixedRate(TimerTask task, Date firstTime, long period):在指定时间点后,以指定频率运行任务。假设一个任务被安排2秒钟运行一次,如果第一次运行花费了1.5秒,则在0.5秒后,第二次任务又会开始执行,以保证固定的执行频率。

●scheduleAtFixedRate(TimerTask task, long delay, long period):在延迟一段时间后以指定频率运行任务。

此外,Timer还拥有几个控制方法:

●cancel():取消Timer的,并丢弃所有被调度的TimerTask,不过正在执行的任务不受影响。Timer被取消后,不能调度新的TimerTask;

●purge():将所有已经取消的TimerTask从Timer列队中清除,如果TimerTask没有外部的引用,就可以被垃圾回收了。一般情况下无需调用该方法,只有在某些特殊情况下,当一次性取消多个TimerTasks后,调用该方法才有意义。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章