根本原因是在于,Timer内部仅维护一个线程执行所有TimerTask,为了避免错误,一个Timer对象最好仅调度一个TimerTask对象,除非可以确保多个TimerTask之间一定不会相互影响 。
因此编写TimerTask时应当自行捕获异常 。
五、取消任务Timer在创建时实际上是默认在内部维护了一个非守护线程,即使任务全部执行完成,线程也并不会销毁 。
Timer提供cancel()方法,可以手动调用取消定时器所有的任务,并销毁定时器 。
如果想要Timer内部创建的是守护线程,可以使用以下构造方法创建定时器,设置isDaemon为true:
- Timer(boolean isDaemon)
- Timer(String name, boolean isDaemon)
如果是要取消单个任务,可以使用TimerTask的cancel()方法 。
当TimerTask调用cancel之后,任务是取消了,但Timer自身并不能马上知道TimerTask被取消,而是在准备执行前才知道,因此Timer内部还维护着这个任务的引用 。若希望Timer立即清除引用,可调用Timer.purge()立即执行清除 。
【Java Timer使用介绍】
经验总结扩展阅读
- 三 Java多线程-ThreadPool线程池
- 液晶电视机选购技巧 教你选购使用与维护电视机
- 二 Java多线程-线程关键字
- 二 Java 编码那些事
- 一 Java多线程-线程生命周期
- SpringBoot 常用注解的原理和使用
- 椰浆稀释用热水还是冻水
- 毛巾发黄怎么洗又干净又软
- 衣物洗过缩水怎么办
- 搪瓷锅第一次使用怎么开锅