package com.jd.schdule;
import java.util.Timer;
import java.util.TimerTask;
/**
* Timer执行延时任务
* 缺点:
* 1、当一个Timer指定多个TimerTask时,一个TimerTask的延时可能会影响后续TimerTask的运行
* 2、当TimerTask抛出未检查异常,Timer线程将被关闭,同时也可能影响调用线程。
* 3、基于服务器绝对时间(基于绝对时间为什么是缺点??)
* Timer代替类,参见 http://medicine.iteye.com/blog/1564950
* @author yfzhangbin
*/
public class TimerTest {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("开始第一个任务");
try {
Thread.sleep(5000);
} catch(Exception e) {
e.printStackTrace();
}
if (true) {
//throw new RuntimeException("error"); // 解除注释 程序运行到此处将结束Timer线程,并抛出异常
}
System.out.println("结束第一个任务");
}
}, 1000);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("开始第二个任务");
try {
Thread.sleep(5000);
} catch(Exception e) {
e.printStackTrace();
}
System.out.println("结束第二个任务");
}
}, 1000);
System.out.println("主线程结束!"); // 因为Timer线程非后台线程,所以主线程执行完毕后jvm不会结束。
}
}
输出:
主线程结束!
开始第一个任务
结束第一个任务
开始第二个任务
结束第二个任务
解除throw注释:
主线程结束!
开始第一个任务
Exception in thread "Timer-0" java.lang.RuntimeException: error
at com.jd.schdule.TimerTest$1.run(TimerTest.java:30)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
分享到:
相关推荐
### Java里timer执行定时任务 #### 一、延时执行 在Java中,`java.util.Timer` 类提供了创建和管理定时任务的功能。如果需要在特定时间之后执行某个任务,可以利用 `Timer` 类的 `schedule()` 方法。此方法接受一...
这种方式更适用于与UI交互相关的延时任务,因为`Handler`可以确保任务在主线程中执行,避免了跨线程操作UI的问题。但是,`Handler`的延时任务依赖于主线程的`Looper`循环,如果主线程被阻塞,延时任务也会受到影响。...
Timer的使用可以分为两种情况,一种是使用Timer来执行延时任务,另一种是使用Timer来执行周期性任务。在使用Timer来执行延时任务时,需要在TimerTask中实现run()方法,并且可以使用Timer的schedule()方法来安排任务...
Android 双击Back键退出应用的实现方法 实现原理: 双击退出程序的原理无非就是设置一个退出标识(询问是否退出),如果...TimerTask 对象需要重写它的 run( )方法,当 Timer 执行延时任务时,则会执行 TimerTask 的
- `Timer` 和 `TimerTask` 提供了更精确的延时控制和周期性任务调度,适合需要定时执行或重复执行的任务,但使用上相对复杂。 4. **注意事项** - 当使用 `Thread.sleep()` 时,记得捕获 `InterruptedException` ...
这份手册详细介绍了如何安装、配置以及使用Vision Timer,包括如何创建延时任务、如何取消已设置的延时任务、如何处理延时回调函数等。它还可能包含了一些使用示例和最佳实践,帮助开发者快速上手并充分利用该插件。...
在Windows Forms(Winform)应用开发中,有时我们需要在用户界面上执行一些后台任务,例如定期检查网络状态或执行其他耗时操作。本例子重点介绍了如何利用`System.Timers.Timer`组件来实现这样的多线程操作,特别是...
通过掌握`Timer`和`TimerTask`,你可以为应用程序添加延时功能或者定期执行的任务,这对于许多实际场景,如数据同步、定时提醒等都是非常有用的。同时,随着技能的提升,可以进一步探索更先进的并发工具,以适应更...
在Android开发中,`Timer`类是一个非常关键的组件,用于执行延时或者周期性的任务。这个类在很多场景下都是不可或缺的,比如动画、定时更新数据、倒计时等。下面将详细介绍`Timer`的使用及其相关知识点。 首先,`...
在许多实时控制系统中,定时器是不可或缺的组件,用于执行周期性任务或实现精确的时间延迟。本篇将详细讨论N76E003的定时器2的自动装载延时功能,并提供一个简单的C语言实现示例。 首先,N76E003中的定时器2是一个...
在Java编程语言中,`java.util.Timer` 和 `java.util.TimerTask` 类是用于执行定期或延时任务的核心组件。它们允许开发者在指定的时间间隔内执行特定的操作,这对于实现定时任务,如定时备份、轮询服务或者执行周期...
而非阻塞延时则不同,它允许任务在等待期间继续执行其他工作,通过定时器事件来唤醒任务,从而提高系统的并发性能。 普通定时器是实现非阻塞延时的一种常见工具。在嵌入式系统中,定时器可以分为硬件定时器和软件...
通过使用Java的Timer类,你可以轻松地在Java应用程序中实现复杂的定时任务调度,无论是简单的延时执行还是周期性的任务循环。结合ActionListener,你可以灵活地控制定时器触发的事件,从而满足各种需求。在实际项目...
在标准的Arduino库中,`delay()`函数用于延时指定的毫秒数,但在此期间,Arduino无法执行其他任务,这限制了其在多任务应用中的使用。而`millis()`函数则返回自上电以来的毫秒数,可以用来实现非阻塞定时,但需要...
C#定时器(Timer)是.NET框架中一个非常重要的组件,它允许开发者在特定的时间间隔内执行特定的代码块,从而实现周期性的任务。在Windows应用程序、服务或控制台程序中,C#定时器常常被用来创建后台任务、监控、更新...
它通过.NET Thread Pool工作,能够在指定间隔后引发`Elapsed`事件,这使得它适合在后台执行周期性任务,如检查服务器状态或定时执行某些操作。与Windows Forms中的`System.Windows.Forms.Timer`不同,`System.Timers...
- 处理中断:当定时器匹配到预设值时,执行中断服务程序,这通常包含停止计数、更新计数值或执行其他延时后操作。 延时功能在很多应用场景中都有需求,例如: - **脉冲控制**:精确的延时可以用于生成特定宽度的...
当TIMER0在特定条件下(如计数器溢出、比较匹配等)产生中断请求时,CPU会暂停当前任务,执行中断服务程序。中断服务程序通常包括更新计数器状态、处理相关任务或调整TIMER0配置。中断优先级可以通过编程设置,确保...
最后,使用`RET`指令使子程序返回调用者,即返回到主程序继续执行其他任务。 ### 小结 通过上述分析,我们可以看到AT89C51单片机中的Timer0是如何被用来实现50ms的精确延时的。这种方法不仅简单有效,而且在许多...