关于Java中定时器Timer和任务TimerTask的实验

1、通过一个Timer 启动多个任务,发现Timer是按每次任务结束后找最早开始执行任务,看下Timer源代码,类中维护了一个 Queue 。而后每次执行一个任务,并不会启动多个线程执行所有任务

2、通过任务输出线程ID和线程名,发现一个Timer只有一个线程,不会为每个任务创建一个新线程

3、Runable 接口,其实不过是规定了一个 run 方法,而不是赋予了线程的能力,TimerTask 实现了Runable但是不是直接交给Thread执行,而是通过TimerThead中的run 去调用TimerTask里的run

4、Java的Object类有wait/notify 方法,这方法调用,调用的对象必须拥有对象的锁标记,也就是线程锁,否则抛出 java.lang.IllegalMonitorStateException 异常

5、当Timer内维护的TimerThead线程中Queue内容为空是 调用Queue的wait 无限时间锁定线程,而当我们加入任务后,调用Queue的notify唤醒线程运行

发表评论