java.util.timer类的具体实现问题
最近在学习java api文档的timer类时,有些疑惑,还请众高手指教。
timer.schedule(TimerTask1, seconds*1000);
timer.schedule(TimerTask2, seconds*1000);
假如我一个方法内有以上两条语句,请问这两条语句的执行顺序具体是怎样的?是两个task并发执行,还是只有task1运行完一次后,task2才接着运行?
从api的文档的介绍上看,timer同一时间只能调度一个task,当延迟时间小于task的运行时间时还会引起阻塞。由此看来,只有task1完成后,task2才能运行。但是timertask类是实现了runable接口的,这样的话,task在运行的时候是作为线程来运行的,那为何只有task1完成后task2才能开始运行呢?此乃疑惑一。我猜想timer的调度功能可能是这样实现的:timer的后台线程首先调用task1,然后暂停,直到收到task1完成的信息后才重新运行,并调用task2。不过如果这样,那么系统同时就应该只有两个线程,一个是timer的后台调度线程,一个是task1或task2运行时产生的线程。而我却看到有3个线程。不知这是怎么回事?此乃疑惑二。
以上均为我对timer类实现过程的揣测,如有何谬误实属正常,还请众高手指点迷津。
另外,在java Tutorial中提到了四种终止timer thread的方法,本人愚钝,看的不是十分明白,也请大家多多赐教。