Timer类负责管理延迟任务以及周期任务。然而,Timer存在一些固有的缺陷。
Timer 在执行定时任务时只会创建一个后台线程。如果某个线程执行的时间过长,那么将破会其他定时任务的精确性。
Timer的另一个问题是,如果TimerTask抛出一个非检查异常,由于Timer不捕获异常导致终止定时任务线程。在这样情况下,Timer无法恢复线程的执行,而是错误地认为整个Timer都被取消了。因此,已经被调度但尚未执行的TimerTask将不会再被执行,新的任务也不能被调度。
Timer支持基于绝对时间而不是相对时间的调度机制,因此任务的执行对系统时间的变化很敏感。
ScheduledThreadPoolExecutor在调度多个定时任务时要好于Timer。
ScheduledThreadPoolExecutor 只支持相对时间的调度。
import java.util.TimerTask; import java.util.concurrent.TimeUnit; /** * * @author zhangwei_david * @version $Id: Ten.java, v 0.1 2014年11月12日 下午3:30:39 zhangwei_david Exp $ */ public class Newline extends TimerTask { /** * @see java.util.TimerTask#run() */ @Override public void run() { try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { } System.out.println("\r\n"); } }
import java.util.TimerTask; /** * * @author zhangwei_david * @version $Id: One.java, v 0.1 2014年11月12日 下午3:29:31 zhangwei_david Exp $ */ public class print extends TimerTask { /** * @see java.util.TimerTask#run() */ @Override public void run() { System.out.print("-"); } } import java.util.TimerTask; /** * * @author zhangwei_david * @version $Id: Stop.java, v 0.1 2014年11月12日 下午4:16:50 zhangwei_david Exp $ */ public class Stop extends TimerTask { /** * @see java.util.TimerTask#run() */ @Override public void run() { throw new RuntimeException("运行异常"); } }
import java.util.Date; import java.util.Timer; import java.util.concurrent.TimeUnit; /** * * @author zhangwei_david * @version $Id: TimerClient.java, v 0.1 2014年11月12日 下午3:31:00 zhangwei_david Exp $ */ public class TimerClient { public static void main(String[] args) { Timer timer = new Timer(); Date d = new Date(); timer.schedule(new print(), d, TimeUnit.SECONDS.toMillis(2)); timer.schedule(new Newline(), d, TimeUnit.SECONDS.toMillis(4)); timer.schedule(new Stop(), TimeUnit.MINUTES.toMillis(1)); } }
执行结果是:
- - - - - - - - - - - - - - - -Exception in thread "Timer-0" java.lang.RuntimeException: 运行异常 at com.cathy.demo.concurrency.schedule.Stop.run(Stop.java:21) at java.util.TimerThread.mainLoop(Unknown Source) at java.util.TimerThread.run(Unknown Source)
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * * @author zhangwei_david * @version $Id: ScheduledThreadClient.java, v 0.1 2014年11月12日 下午3:47:37 zhangwei_david Exp $ */ public class ScheduledThreadClient { /** * * @param args */ public static void main(String[] args) { ScheduledExecutorService ses = new ScheduledThreadPoolExecutor(10); ses.scheduleAtFixedRate(new print(), 0, 2, TimeUnit.SECONDS); ses.scheduleAtFixedRate(new Newline(), 2, 4, TimeUnit.SECONDS); ses.scheduleWithFixedDelay(new Stop(), 1, 1, TimeUnit.MILLISECONDS); } }
结果是:
--- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
相关推荐
最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED...
单片机C语言程序设计 TIMER0与TIMER1控制条形LED(有源码)单片机C语言程序设计 TIMER0与TIMER1控制条形LED(有源码)单片机C语言程序设计 TIMER0与TIMER1控制条形LED(有源码)单片机C语言程序设计 TIMER0与TIMER1控制...
单片机C语言程序设计31 TIMER0与TIMER1控制条形LED(基于8051+Proteus仿真)单片机C语言程序设计31 TIMER0与TIMER1控制条形LED(基于8051+Proteus仿真)单片机C语言程序设计31 TIMER0与TIMER1控制条形LED(基于8051+...
51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51...
C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4...
基于Keil+51单片机TIMER0与TIMER1控制条形LED.rar(源码+仿真)基于Keil+51单片机TIMER0与TIMER1控制条形LED.rar(源码+仿真)基于Keil+51单片机TIMER0与TIMER1控制条形LED.rar(源码+仿真)基于Keil+51单片机TIMER0...
TIMER0与TIMER1控制条形LED,比赛练习案例,仿真实例,现成调用封装使用,可运行的仿真电路图和调好的程序,开箱即用。适用于教学案例、毕业设计、电子设计比赛、出书项目实例,实际设计、个人DIY参考。 已调试好,...
本文实例讲述了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,分享给大家供大家参考。具体分析如下: 在.NET Framework里面提供了三种Timer ① System.Windows.Forms.Timer ② System.Timers.Timer ③...
基于Verilog的timer计时器,start开始,到达设置计时点时输出一个高电平up信号
加Timer控件 timer1 编写其Tick事件为 private void timer1_Tick(object sender, EventArgs e) { this.toolStripStatusLabel3.Text = "系统当前时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } ...
基于51单片机的设计,需要下载请详细查看压缩包内容,有些有源程序,有仿真文件,资料过多,请仔细查看。
通过java的TimerTask与Timer设计时间监控,写了一个测试类,帮助新人学习。
学习32位单片机的基础例程,主要针对初学者对TIMER的编程学习
addintimer高级版是一个万能定时器,非常好用,强烈推荐,可以当时间定时器来用,还有整点报时,定时录音等功能
单片机C语言程序设计TIMER0控制流水灯(基于8051+Proteus仿真)单片机C语言程序设计TIMER0控制流水灯(基于8051+Proteus仿真)单片机C语言程序设计TIMER0控制流水灯(基于8051+Proteus仿真)单片机C语言程序设计...
STC8a8k所有定时器测试程序
c8051f340 TIMER0定时器中断,通过定时器达到所需的功能
51单片机Proteus仿真实例 TIMER0控制流水灯51单片机Proteus仿真实例 TIMER0控制流水灯51单片机Proteus仿真实例 TIMER0控制流水灯51单片机Proteus仿真实例 TIMER0控制流水灯51单片机Proteus仿真实例 TIMER0控制流水灯...
31 TIMER0与TIMER1控制条形LED