刚刚看了一下源码很简单,就不贴代码了,转载的有分析。
总结一下:
Timer类有个私有内部类,java.util.TaskQueue 这里面以一个数组纪录了所有的TimerTask。
它有个fixup方法,把新进的任务排队到合适的位置,第一个位置就是最近之行的。
还有一个java.util.TimerThread的私有内部类,在timer构造函数的时候,这个线程就启动了。
然后,这个线程一直运行一个mainLoop方法,从TaskQueue对象中,获取最小的那个task,
等待执行时间的到达,就在当前线程执行这个task。
这里很有问题,难怪doug lea大师也让我们别用Timer,最好用ScheduleExecutorService. 因为:
如果有多个任务,前面的任务执行时间较长的话,会阻塞后面的任务。
所以Timer比较适合那种定时执行某个固定间隔的任务。
http://blog.csdn.net/liziyun537/article/details/6710834
http://www.open-open.com/lib/view/open1337176725619.html