在上篇的JAVA定时任务调度之Timer入门详解(二)文章中,我们介绍了schedule()方法和scheduleAtFixedRate()方法的具体使用情况,已经学会了一些简单的定时任务,接下来我们说下:

  一、TimerTask类下的lcancel()和scheduledExecutionTime();

  cancel()方法的作用是取消当前TimerTask里的任务。具体实例代码如下:

  Mytimer.java代码如下:

  

java timertask 内存消耗 java timer cancel_实例代码

  MyTimerTask.java部分代码如下,省略了导包还有get、set方法  

  

java timertask 内存消耗 java timer cancel_java_02

  控制台打印结果如下:

  

java timertask 内存消耗 java timer cancel_JAVA_03

  这刚好与我们预期结果相符合,说明cancel()方法可以取消当前TimerTask里的任务。

  scheduledExecutionTime()的作用是获得task最近一次计划执行时间返回类型为long。测试代码如下:

  

java timertask 内存消耗 java timer cancel_JAVA_04

  控制台打印如下:

  

java timertask 内存消耗 java timer cancel_实例代码_05

  第二行为scheduledExecutionTime()方法输出的时间,在这里我们用SimpleDateFormat转化了下格式,输出为第一次执行的时间3秒后。

  二、Timer类下的cancel()和purge()方法

  cancel()方法的作用是终止此计时器,丢弃所有当前已安排的任务。测试代码涉及两个类,如下:

  Cantest.java

  

java timertask 内存消耗 java timer cancel_java_06

  MyTimerTask.java的代码如下:

java timertask 内存消耗 java timer cancel_实例代码_07

  控制台打印结果如下:

  

java timertask 内存消耗 java timer cancel_JAVA_08

  在这个地方我不明白的是,为什么cancel()方法执行后,task1还会执行一次,理应不会执行。还有,既然执行了,为什么task2不再执行一次?真的是痛苦,找不到原因。希望  大家看到的也帮我找找原因,一起学习。

  purge();        意义为:从任务队列中移除已经取消的task,cancel()可以取消(停止)任务。此方法返回值为移除的任务task的数量。废话不多说,看实例:

  Cantest.java

  

java timertask 内存消耗 java timer cancel_java_09

  MyTimerTask.java的代码跟上面一样。

  运行后控制台打印如下:

  

java timertask 内存消耗 java timer cancel_java_10

  可以发现在5秒后,task2停止执行,task1依然在执行。且在task2执行了cancel()方法之后,puege()方法返回值为1。