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进行消费。
分享到:
相关推荐
主要介绍了Java多线程定时器Timer原理及实现,涉及Timer的schedule的使用,定时器Timer的schedule等相关内容以及代码示例,具有一定参考价值,需要的朋友可以了解下。
多谐振荡器电路工作原理 多谐振荡器电路是一种矩形波产生电路。这种电路不需要外加触发信号,便能连续地, 周期性地自行产生矩形脉冲。该脉冲是由基波和多次谐波构成,因此称为多谐振 荡器电路。 1.路图 2.把双...
主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
XC7K325T MicroBlaze AXI Timer实验(含教程和FPGA工程),有操作教程,FPGA源码(VIVADO2017.4打开),参考原理图,资料总共162MB。
详细介绍51单片机中定时器2的工作原理及在程序编写中的设置和应用。
用于timer,延时继电器的开发
这里有实验所用到的源代码和实验报告,对同学们非常有用。。。实验报告给大家作为参考 简介: 实验目的 熟练掌握外部中断原理、外部中断响应方式...了解Timer工作原理及其中断产生方式及响应方式,掌握Timer控制方法。
本实验包含两部分,前面三个实验是ARM 7指令系统指令实验,使用ADS的编译器和调试器进行仿真调试,主要目的是掌握ARM7的指令系统和开发工具的使用,理解ARM CPU的工作过程。后面三个实验是真实的ARM系统,硬件微控制...
通信原理课的实验2定时器,使用DSP汇编语言编成asm文件。此文件包括详细的实验讲义和程序源码。
WPF VB.net时钟,timer,可计时用,倒计时用...
主要介绍了Python定时执行之Timer用法,实例分析了Timer模块的原理及相关使用技巧,需要的朋友可以参考下
LM3S系列 基本操作 带原理 值得参考
新唐N76E003单片机参考设计原理图+实验例程源码合集(38例): ADC_Bandgap ADC_IO_Trig ADC_PWM_Trig ADC_Simple Clock_Out Fsys_Select GPIO I2C_EEPROM I2C_Master-Slave IAP_AP-program-AP_Dataflash IAP_AP-...
微机原理实验之一,电梯的程序,欢迎下载 PA EQU 218H PB EQU 219H PC EQU 21AH TIMER_C EQU 203H TIMER2 EQU 202H MODE23 EQU 0B6H INT0 EQU 220H INT1 EQU 221H STACK SEGMENT STACK STA DB 100 DUP(?) TOP EQU ...
Proteus仿真实例,Proteus仿真原理图
摘要视图订阅登录 | 注册Linux时间管系统(7)01.struct hrtimer {1251838次第1606名51篇0篇4篇555条定时器的到期时间用k
HC32L110_HC32F003_HC32F005系列的特殊端口使用及注意事项说明Rev1.0.pdf HC32L110_HC32F003_HC32F005系列的系统时钟异常切换Rev1.0.pdf HC32L110_HC32F003_HC32F005系列硬件开发指南Rev1.0.pdf HC32L110系列的RTC...
主要介绍了Node.js API详解之 timer模块用法,结合实例形式分析了Node.js API中timer模块基本功能、原理、用法及操作注意事项,需要的朋友可以参考下
02_NUCLEO-L476RG_Software_Timer