首页 课程 师资 教程 报名

Java多线程,Timer类的使用

  • 2020-08-04 16:45:30
  • 2270次 动力节点

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

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

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

Java多线程,Timer类的使用

下面看一下代码的示例。

Java多线程,Timer类的使用

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

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

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

Java多线程,Timer类的使用

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

Java多线程,Timer类的使用

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

Java多线程,Timer类的使用

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

Java多线程,Timer类的使用

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

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

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

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

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交