扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:闹市孤僧 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者