问题描述
我用如下java代码实现定时执行任务的功能Timertimer=newTimer()TimerTasktask1=newTimerTask();TimerTasktask2=newTimerTask();TimerTasktask3=newTimerTask();timer.shedule(task1,3*1000,30*1000);timer.shedule(task2,4*1000,30*1000);timer.shedule(task3,5*1000,30*1000);我想请教:(1)在第一个timer.shedule()运行后,是否启动一个新线程运行task1,也就是task1,task2,task3是否分别运行在三个线程上?(2)如果三个任务是运行在三个线程上,三个任务各自的时间是否没有关系?
解决方案
解决方案二:
LZ方法名貌似不对啊!!应该是timer.schedule(TimerTasktask,longdelay,longperiod)我看了下jdk1.5的帮助文档,文档中有这么一句话:--------------------------------------publicclassTimerextendsObject一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。与每个Timer对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述令人讨厌的任务最终完成时才能够被快速连续地执行。---------------------------------------所以我认为:在timer.schedule()运行后,不会启动一个新线程运行task任务,这三个task任务都是在一个线程上运行的。