• 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实际只开启一个线程,不管调度任务有多少。

  • 相关阅读:
    在宏块级冗余可调的多描述视频编码算法方面取得进展(转载)
    C++单例模式
    C++手动实现库函数
    C#操作java平台生成的公钥
    C++之位操作符
    Windows 8 应用栏
    Windows 8 本地数据存储
    Win8的页面缓存
    操作符sizeof
    three.js结合geoJson绘制中国地图
  • 原文地址:https://www.cnblogs.com/zby9527/p/7539059.html
Copyright © 2020-2023  润新知