学而时习之,不亦说乎!
--《论语》
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实际只开启一个线程,不管调度任务有多少。