Timer使用及工作原理
本文将结合源码来分析JDK timer的使用方法及工作原理。 以下源码均基于JDK1.6_14
JDK1.3加入Timer。
一、Timer的使用
//new task and schedule task (delay 2s exec)
Timer timer = new Timer();
//add task1
Task task = new Task("t1");
timer.schedule(task,2000);
Timer 使用很简单,schedule可以支持任务的延迟执行、周期执行、一次性执行。
二、Timer的原理
Timer中有三个非常重要的概念。一个就是 TaskQueue。
class TaskQueue {
/**
* Priority queue represented as a balanced binary heap: the two children
* of queue[n] are queue[2*n] and queue[2*n+1]. The priority queue is
* ordered on the nextExecutionTime field: The TimerTask with the lowest
* nextExecutionTime is in queue[1] (assuming the queue is nonempty). For
* each node n in the heap, and each descendant of n, d,
* n.nextExecutionTime <= d.nextExecutionTime.
*/
private TimerTask[] queue = new TimerTask[128];
... ...
TaskQueue 的实现非常简单,如上它的核心就是一个 Task数组,值得注意的是,每当Timer向TaskQueue添加一个任务的时候,它会根据任务的下次执行时间进行正序,保持最近一次要执行的任务总是在队列的最前面。
Timer的另外一个重要成员就是 TimerThread
class TimerThread extends Thread {
... ...
TimerThread是 TaskQueue的consumer,而且每个Timer只有一个TimerThread的实例,也就是一个timer执行多个任务的时候,他是起一个TimerThread线程顺序执行队列中的任务。
与Timer息息相关的另外一个重要概念就是TImerTask
public abstract class TimerTask implements Runnable {
这个类很简单,除了 implements Runnable,类中还包含了一些Task的meta信息,如锁、状态、执行时间等。
三 总结
Timer类有一个TaskQueue,一个TimerThread对队列中的TimerTask进行消费。
分享到:
相关推荐
在C# Winform应用程序中,实现鼠标坐标的动态显示,我们可以...在这个过程中,理解Timer的工作原理和如何与事件处理函数交互是非常关键的。而具体的实现细节,如UI元素的选择和布局,可以根据实际应用需求进行调整。
测试程序会演示如何在16位模式下使用Timer1,并展示如何利用其捕获和比较功能。 3. **Timer2**:这是一个16位定时器,具有更强大的计数能力。它支持多种工作模式,包括正常、波特率发生器、捕获、比较和PWM(脉宽...
总结来说,C#的Timer类提供了灵活的方式来实现在多线程环境下的定时任务,理解它们的工作原理和使用方式对于编写高效、可靠的后台服务或UI交互至关重要。通过实践,你可以更好地掌握这些知识,并在你的项目中...
【Timer定时器的使用方法】 在Java编程语言中,`java.util.Timer` ...理解这些类的工作原理以及如何正确使用它们,是Java开发中不可或缺的一部分。通过实际编程实践,可以更好地掌握这些概念并灵活运用到实际项目中。
下面我们将深入探讨`System.Threading.Timer`的使用、工作原理以及如何在实际开发中应用它。 ### 1. `System.Threading.Timer`概述 `System.Threading.Timer`提供了一个简单的接口,允许开发者设置一个回调函数,...
本篇文章将详细阐述`Timer`组件的基本原理及其在C# WinForm项目中的应用方法。 #### 一、Timer组件简介 `Timer`组件是Windows Forms应用程序中非常实用的一个工具。与其他控件不同的是,`Timer`组件是不可见的,也...
- **工作原理**:`System.Threading.Timer` 使用回调函数来触发事件,当指定的时间间隔过去后,它会将委托调用到指定的方法。 - **创建方式**:通过传递四个参数构造一个`System.Threading.Timer`实例:回调方法、...
Java多线程定时器Timer原理及实现是Java应用中非常重要的一部分,涉及Timer的schedule的使用,定时器Timer的schedule等相关内容,以及代码示例。 Timer对象在内部使用多线程方式进行处理,因此它和多线程技术关联...
首先,`System.Timer`的工作原理是通过回调一个委托方法来执行指定的任务。创建`Timer`对象时,需要提供一个`TimerCallback`类型的委托,该委托指定了在时间间隔到达时要调用的方法。例如: ```csharp public ...
Timer的基本工作原理是:当接收到start信号后,它开始计数,直到达到预设的计时点,然后输出一个高电平的up信号。这个过程通常涉及到计数器和比较器等基本逻辑单元的组合。 首先,我们需要创建一个计数器模块,这...
`Timer` 控件的工作原理是基于 JavaScript 和服务器端事件的协同。在客户端,`Timer` 控件通过 JavaScript 代码周期性地触发回发,即模拟用户操作,使得页面能够定期与服务器进行通信,获取或更新数据。在服务器端,...
在本文中,我们将深入探讨`Timer`类的工作原理、常用方法以及如何使用它来创建和管理定时任务。 `Timer`类主要用于计划在将来某个时间点执行的任务,这通常通过`TimerTask`类来实现,`TimerTask`是实现了`Runnable`...
`Timer` 的工作原理是通过创建一个后台线程,当设定的时间到达时,它会调度任务进行执行。然而,`Timer` 有一些限制,比如它不支持并发任务执行,如果一个任务执行时间过长,会影响到其他任务的调度。此外,`Timer` ...
Timer0的工作原理是根据预设的计数值进行递减计数,当计数值归零时,会产生一个定时中断或触发特定事件。在8位的AVR微控制器系列中,Timer0通常为8位,而在某些32位微控制器如STM32中,Timer0可能有16位或更高级别的...
首先,我们需要理解`Timer控件`的基本原理。在Web环境中,Timer控件通常是一个JavaScript或者jQuery对象,它能够周期性地触发一个事件,比如每秒或每分钟执行一次特定的函数。这样,我们就可以利用这个特性来更新...
- 调试工具如逻辑分析仪和模拟器可以帮助开发者深入理解定时器的工作原理和行为。 7. **安全性和可靠性**: - 硬件定时器的错误可能导致系统崩溃或不稳定,因此驱动程序需要有良好的错误处理机制,如异常处理和...
`System.Windows.Forms.Timer`的工作原理是基于消息循环的,它的`Tick`事件会在间隔时间到达时触发。下面是一个简单的`Timer`使用示例: ```csharp using System; using System.Windows.Forms; public class ...
总的来说,RTOS Timer开发指南1是一份详尽的指南,不仅解释了Timer的工作原理,还提供了实践中的指导,是RTOS开发者的宝贵工具。通过遵循这份指南,开发者能够熟练地利用Timer实现各种复杂的定时和计数需求,提升...
C8051F340系列微控制器是一款高性能、低功耗的8051兼容MCU,广泛应用于各种嵌入式系统中。在这款芯片中,TIMER2是一个重要的定时/...在设计和调试过程中,理解并熟练掌握TIMER2中断的工作原理和使用方法至关重要。