Timer和ScheduledExecutorService都可以用来做定时任务,有管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务")。但至从JDK1.5之后,建议采用ScheduledExecutorService。
原因如下:
1、Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的;但ScheduledThreadExecutor只支持相对时间。
2、如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以 TimerTask抛出的未检查的异常会终止timer线程。此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。
3、Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行 ,ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区)
Timer:
- public class TimerTest {
- private static final Timer timer1 = new Timer(true);
- public static void main(String[] args) {
- timer1.schedule(new TimerTask(){
- @Override
- public void run() {
- System.out.println("执行定时任务...");
- }
- }, 0, 60000*1);
- }
- }
ScheduledExecutorService:
- public class ScheduleExecutor {
- private final ScheduledExecutorService scheduler =
- Executors.newScheduledThreadPool(1);
- public void beepForMin() {
- final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
- new Runnable() {
- public void run() {
- System.out.println("执行。。。");
- }
- }, 0, 10, SECONDS);
- scheduler.schedule(new Runnable() {
- public void run() {
- beeperHandle.cancel(true);
- System.exit(0);
- }
- }, 30, SECONDS);
- }
- public static void main(String[] args) {
- ScheduleExecutor se = new ScheduleExecutor();
- se.beepForMin();
- }
- }
相关推荐
最新单片机仿真 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控制...
GD32F330 Timer定时器中断功能使用
单片机C语言程序设计31 TIMER0与TIMER1控制条形LED(基于8051+Proteus仿真)单片机C语言程序设计31 TIMER0与TIMER1控制条形LED(基于8051+Proteus仿真)单片机C语言程序设计31 TIMER0与TIMER1控制条形LED(基于8051+...
Timer控件的使用方法介绍
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...
Timer和TimerTask的使用 关于java函数中timer类的相关代码 和使用
使用System.Threading.Timer 使用System.Timers.Timer 分别举例这两个类来实现多线程的时钟,不会阻塞UI线程 例子是Winform的
关于winform使用timer进行多线程操作的例子 一个关于网段ping的例子 很好的解释了system.timers.timer的用法
本文实例讲述了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,分享给大家供大家参考。具体分析如下: ...是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事
使用Timer控件创建一个网页时钟,要求无刷新的方式进行时间的更新和显示
本工程为java工程,使用MyEclipse新建。
51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51单片机Proteus仿真实例 TIMER0与TIMER1控制条形LED51...
system.Threading.Timer的使用
TIMER0与TIMER1控制条形LED,比赛练习案例,仿真实例,现成调用封装使用,可运行的仿真电路图和调好的程序,开箱即用。适用于教学案例、毕业设计、电子设计比赛、出书项目实例,实际设计、个人DIY参考。 已调试好,...
Android中timer是很常用的一种功能,几乎在每一个项目中都会用到,所以我写了一个简单例子和大家分享
boost steady_timer使用方法,
在 Win32 体系结构中有两种类型的线程:UI 线程和辅助线程。UI 线程绝大多数时间处于空闲状态,...Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造函数中设置。
Timer的使用,可以帮助初学者学会简单运用定时器,并实现动画的编程