Java多线程,Timer类的使用

      2020-09-16 14:30      JAVA编程


如何使新创建的Timer为守护线程。先看一下API中提供的一个方法。


对Timer对象最后的引用完成后,并且所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的cancel方法。


这里说的是用Timer的cancel方法,但是还有一个方法就是构造函数的时候,调用的是带boolean参数的构造函数。



下面看一下代码的示例。



可以看到这边任务执行完后进程就停止了。


前面是说了单个TimerTask任务,那么多个TimerTask任务运行起来会是怎么样的呢?


Timer是允许多个TimerTask任务的,下面看一下代码示例。



这里创建了两个任务对象。Timer去启动两个任务对象,从结果可以看到,Timer是允许多个TimerTask任务的。其实在Timer里面的TimerTask任务是以队列的方式一个一个被顺序执行的,上面的代码可能还看不出来,下面创建两个MyTask类(所运行的时间不一样),下面看下代码及测试结果。



任务1里面不做睡眠处理。



在任务2中,让线程睡眠20s(模拟任务执行时间20s),下面看下测试类和结果。



从结果可以看到,MyTask1先开始运行,MyTask2需要排队,等待MyTask1运行完后才能继续运行。


所以总结来说,TimerTask是以队列的方式一个一个被顺序执行的,所以执行的时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间比较长,则后面的任务运行的时间也会被延迟。


Java Timer定时器:http://www.bjpowernode.com/tutorial_java_advance/672.html


以上就是java培训机构的小编针对“Java多线程,Timer类的使用”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。