延迟的、具有周期性的任务
Timer只创建唯一的线程来执行所有timer任务。如果一个timer任务的执行很耗时,会导致其他TimerTask的时效准确性出问题。例如一个TimerTask每10ms执行一次,而另一个TimerTask每40ms执行一次,重复出现的任务要么会在耗时的任务完成后快速连续地被调用4次,要么完全“丢失”4次调用(取决于它是否按照固定的频率或延迟进行调度)。调度线程池(Scheduled thread pool)解决了这个缺陷,它让你可以提供多个线种来执行延迟、并具周期性的任务。
Timer的另一个问题在于,如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以TimerTask抛出的未检查的异常会终止timer线程。这种情况下,Timer也不会再重新恢复线程的执行了;它错误地认为整个Timer被取消了。此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被高度了。(这个问题叫“线程泄漏”)。
在java5.0或更高的JDK中,几乎没有理由再使用Timer了。
分享到:
相关推荐
C#中的Timer类主要存在于System.Threading命名空间下,有两种常见的类型:`System.Threading.Timer` 和 `System.Windows.Forms.Timer`。前者适用于多线程环境,后者主要用于Windows Forms应用程序,与UI交互更紧密...
虽然 `Timer` 在很多场景下足够用,但其线程模型和同步机制存在一些问题,可能导致某些情况下的死锁。对于更复杂的定时需求,可以考虑使用 `java.util.concurrent` 包中的 `ScheduledExecutorService`,它提供了更...
`Timer`组件通常存在于各种编程框架中,例如.NET Framework(C#、VB.NET等)、Java(Swing、Android)以及JavaScript(浏览器环境)。在Windows Forms或WPF等桌面应用开发中,`System.Windows.Forms.Timer`是常用的`...
- 对于Timer控件,由于其工作在UI线程上,这个问题在此项目中可能不会出现,但如果是异步或多线程环境,就需要注意。 6. **文件“随机数_带个破表”**: - 这可能是项目的源代码文件,其中包含了实现随机数生成和...
本文将详细介绍如何在VC++中使用`Timer`,以及一些关键知识点和注意事项。 首先,`Timer`的使用通常涉及到以下几个步骤: 1. **创建Timer**: 你可以通过调用`SetTimer`函数来创建一个定时器。例如,在`CMyDlg`类...
但是,Timer存在一些缺陷,如创建唯一的线程来执行所有Timer任务,如果一个timer任务的执行很耗时,会导致其他TimerTask的时效准确性出问题。同时,如果TimerTask抛出未检查的异常会终止timer线程。 Timer的使用...
在实际开发中,由于`Timer`类存在一些问题,如精度不够高,且当`Timer`关联的线程被中断或抛出未捕获异常时,整个`Timer`会被取消,因此在Java 5及更高版本中,通常推荐使用`ScheduledExecutorService`替代`Timer`,...
在实际应用中,`Timer`和`TimerTask`虽然简单易用,但存在一些限制。比如,它们是单线程的,这意味着如果一个任务执行时间过长,会阻塞后续任务的执行,造成任务调度的不准确。此外,由于`Timer`使用了守护线程,...
在介绍PIC16F1829单片机的TIMER0初始化程序之前,我们需要了解一些基础概念和术语。PIC单片机是由Microchip Technology Inc.(微芯科技公司)生产的一系列8位微控制器产品,广泛应用于嵌入式系统设计。PIC16F1829是...
- **条件判断**:接下来的if语句检查全局时钟事件(global_clock_event)是否存在,如果不存在,则函数直接返回,不再执行后续操作。 - **中断屏蔽**:使用`local_irq_save(flags)`保存当前的中断标志寄存器,这在...
它存在于`System.Timers`命名空间下,主要包含两种类型:`System.Timers.Timer` 和 `System.Windows.Forms.Timer`。 - `System.Timers.Timer`适用于多线程环境,适合服务器端或后台任务,而`System.Windows.Forms....
若存在,则使用`process_post`启动对应的进程,并发送`PROCESS_EVENT_TIMER`事件。 3. 若启动成功,则将`etimer`的`p`成员设置为`PROCESS_NONE`,表示该`etimer`已处理完毕。随后更新`timerlist`,并调用`update_...
这种方式简单易用,但存在一个明显的限制:TIMER运行在创建它的线程上下文中,通常是主线程。这意味着TIMER事件的处理会阻塞主线程,如果定时任务复杂或耗时,将影响主线程的响应速度,可能导致用户界面卡顿。 相反...
1. **使用更高精度的计时器**:一些编程语言提供了更精确的计时器API,如Java的`System.nanoTime()`,它可以提供纳秒级别的计时,比毫秒级别的`System.currentTimeMillis()`更为精确。通过这种方式,可以更精确地...
- **用途**:这个定时器类是为了解决`System.Windows.Forms.Timer`的一些局限性而设计的,尤其是针对那些需要高精度计时的应用程序。 - **工作原理**:虽然也依赖于.NET Framework的线程池来执行定时任务,但相比`...
虽然`Timer`类在处理简单定时任务时非常有用,但它存在一些限制,比如: - **线程安全问题**:如果多个`TimerTask`之间有共享数据,不恰当的同步可能导致线程安全问题。 - **中断处理**:`TimerThread`被设计为无法...
- `mod_timer()`可以用来修改已经存在的定时器,例如调整超时时间。 - `del_timer()`用于删除不再需要的定时器,防止不必要的资源浪费。 2. **硬定时器(Hardware Timers)**: - HRTimers提供亚微秒级的精度,...
GCD timer则不存在这个问题,它不依赖于RunLoop,因此更容易管理。 - **精确性**:GCD timer在多核CPU上的表现更稳定,计时更精确。 - **灵活性**:GCD timer可以在不同的线程上运行,可以根据需求调整执行环境。 ...
虽然`Timer`简单易用,但它存在一些限制,比如任务调度不是线程安全的,且任务取消可能导致内存泄漏。因此,在多线程和复杂的应用场景下,`Timer`可能不是一个理想的选择。 接下来,我们转向Spring框架的定时任务。...
这个名字暗示了这个程序可能是作者为了表达感谢而制作的一个小程序,但它也暴露了一些可能的实现细节,比如只有一个主程序文件,可能意味着代码没有进行模块化设计或者没有外部依赖。 综合上述信息,这个程序实例...