众所周知
,
Timer.cancel() 被调用之后整个Timer
的
线程都会结束掉
,
此处讨论的是在timer的task线程内将Timer cancel掉之后
,
Timer.cancel() 方法后面余下的线程部分会不会被执行完成。
下面是我写的一个测试代码:
public class TimerDemo
{
private Timer timer;
private TimerTask timerTask;
public void doTask()
{
timer = new Timer();
timerTask = new TimerTask()
{
public void run()
{
System.out.println("before timer cancle");
//timer.cancel();//注释掉看schedule是否工作,与不注释作对比
System.out.println("after timer cancle");
}
};
timer.schedule(timerTask, 0, 5 * 1000);
}
public static void main(String[] args)
{
TimerDemo demo = new TimerDemo();
demo.doTask();
}
}
测试结果:
(不注释
timer.cancel();
)
%USERPROFILE%\Desktop\> java TimerDemo
before timer cancle
after timer cancle
Process java exited with code 0
(注释
timer.cancel();
)
%USERPROFILE%\Desktop\> java TimerDemo
before timer cancle
after timer cancle
before timer cancle
after timer cancle
...
说明:不调用
timer.cancel();的话
timerTask线程会一直被执行,
调用
timer.cancel();的话,
timerTask也会执行完当次之后才不会继续执行。