Timer分析

学而时习之,不亦说乎!

                             --《论语》


Java的JDK中自带的任务调度实现。简单易用,源码也很清晰,总共由四个类组成,都在Timer.java一个文件中,看完总结如下:

abstract class TimerTask implements Runnable
    --long nextExecutionTime//下一次执行时间,用于优先级队列排序
    --long period//每次执行时间间隔
class TaskQueue//优先级队列,使用二叉堆算法
    --TimerTask[] queue//存放所有任务
    --void add(TimerTask task)
    --TimerTask getMin()
    --void removeMin()
class TimerThread extends Thread
    --TaskQueue queue//保存任务的优先级队列
public class Timer
    --TaskQueue queue = new TaskQueue()
    --TimerThread thread = new TimerThread(queue)
    --public Timer(String name, boolean isDaemon) //启动线程
    --private void sched(TimerTask task, long time, long period)//把任务加入到队列中

创建Timer对象时启动了TimerThread线程,我们调用Timer的scheduleXX()方法时,TimerTask被加入TaskQueue,TimerThread线程开始遍历TaskQueue,调用TimerTask的run方法。

注意:

1)TaskQueue是使用二叉堆算法的优先级队列。

2)TimerTask实现Runnable接口,只是为了我们把业务代码写到一个固有方法中,在TimerThread线程run方法中直接调用,并不是给Thread当成target使用,因为一个Timer实际只开启一个线程,不管调度任务有多少。

原文地址:https://www.cnblogs.com/zby9527/p/7539059.html