而定义TimerThread部分的是:
看到这里知道了,Timer内部包装了一个线程,用来做独立于外部线程的调度,而TimerThread是一个default类型的,默认情况下是引用不到的,是被Timer自己所使用的。
接下来看下有那些属性
除了上面提到的thread,还有一个很重要的属性是:
private TaskQueue queue = new TaskQueue();
看名字就知道是一个队列,队列里面可以先猜猜看是什么,那么大概应该是我要调度的任务吧,先记录下了,接下来继续向下看:
里面还有一个属性是:threadReaper, 它是Object类型,只是重写了finalize方法而已,是为了垃圾回收的时候,将相应的信息回收掉,做GC的回补,也就是当timer线程由于某种 原因死掉了,而未被cancel,里面的队列中的信息需要清空掉,不过我们通常是不会考虑这个方法的,所以知道java写这个方法是干什么的就行了。
接下来看调度方法的实现:
对于上面6个调度方法,我们不做一一列举,为什么等下你就知道了:
来看下方法:
public void schedule(TimerTask task, long delay)
的源码如下:
1 public void schedule(TimerTask task, long delay) {
2 if (delay < 0)
3