Java源码-Timer
定时器,调度执行延时任务。
1 使用方式
java
1 |
|
2 源码分析
涉及到的几个类
- Timer-定时器,负责调度任务和执行任务。
- TimerThread-本质是Java线程。
- 首先,Timer定时器依赖这个线程轮询监控任务队列,实现对任务的调度。
- 其次,Timer定时器获取到满足执行条件的任务后,依赖该线程执行任务。
- TaskQueue-小根堆,存放任务的容器,Timer定时器管理任务的实现。
- TimerThread-本质是Java线程。
- TimerTask-Runnable类型的抽象类,预留了run(),业务逻辑实现定义在该方法等着被Timer定时器调度执行。
2.1 Timer构造方法
java
1 |
|
thread
这个成员变量本质是个线程,Java线程是映射到OS的pthread_create
系统调用创建出来的线程,线程被CPU调度到之后回调定义在Java Thread中的run方法。
2.2 TimerThread::run
java
1 |
|
实现逻辑定义在方法mainLoop()
中了
mainLoop
java
1 |
|
2.3 TaskQueue
优先级队列的实现,小根堆,数据结构使用的是数组,那么规则如下:
为了使用数组构造二叉树结构,假设root脚标为x,则:
- left节点脚标为2x
- right节点脚标为2x+1
这样的规则就要弃用数组中脚标0,实际存储元素重下标[1…]开始。
java
1 |
|
2.3.1 入队
java
1 |
|
java
1 |
|
2.3.2 队头元素
java
1 |
|
2.3.2 出队
java
1 |
|
java
1 |
|
Java源码-Timer
https://bannirui.github.io/2023/03/04/Java源码-Timer/