Java Timer使用介绍( 四 )


根本原因是在于,Timer内部仅维护一个线程执行所有TimerTask,为了避免错误,一个Timer对象最好仅调度一个TimerTask对象,除非可以确保多个TimerTask之间一定不会相互影响 。
因此编写TimerTask时应当自行捕获异常 。
五、取消任务Timer在创建时实际上是默认在内部维护了一个非守护线程,即使任务全部执行完成,线程也并不会销毁 。
Timer提供cancel()方法,可以手动调用取消定时器所有的任务,并销毁定时器 。
如果想要Timer内部创建的是守护线程,可以使用以下构造方法创建定时器,设置isDaemon为true:

  • Timer(boolean isDaemon)
  • Timer(String name, boolean isDaemon)
如果没有自己定义name参数,默认Timer内部自动命名为“Timer-递增序号”,作为内部线程的线程名称,在构造方法内启动此线程 。
如果是要取消单个任务,可以使用TimerTask的cancel()方法 。
当TimerTask调用cancel之后,任务是取消了,但Timer自身并不能马上知道TimerTask被取消,而是在准备执行前才知道,因此Timer内部还维护着这个任务的引用 。若希望Timer立即清除引用,可调用Timer.purge()立即执行清除 。
【Java Timer使用介绍】

经验总结扩展阅读