java中自带的定时器有Timer和TimerTask,但是运行起来要结束任务用cancel方法可以结束该任务,此时Timer线程还在运行,程序并没有退出,那么怎么结束Timer呢?
示例代码如下
public class Test {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask timerTask = new MyTimerTask();
TimerTask timerTask2 = new MyTimerTask2();
Date now = new Date();
timer.scheduleAtFixedRate(timerTask, now, 3 * 1000L);
timer.scheduleAtFixedRate(timerTask2, now, 3 * 1000L);
System.out.println("主线程先结束了!!");
}
}
public class MyTimerTask extends TimerTask{
private int count = 0;
@Override
public void run() {
System.out.println("MyTimerTask计数:" + count);
if(++count > 5) {
System.out.println("MyTimerTask 结束了!!");
System.gc();
cancel();
}
}
}
public class MyTimerTask2 extends TimerTask{
private int count = 0;
@Override
public void run() {
System.out.println("MyTimerTask2计数:" + count);
if(++count > 2) {
System.out.println("MyTimerTask2 结束了!!");
System.gc();
cancel();
}
}
}
运行test结果如下
当注释掉两个System.gc()后,结果如下
当注释掉两个cancel()后,结果如下
本文详细探讨了Java中内置定时器Timer及其任务TimerTask的使用方法,并深入解析了如何优雅地结束定时任务,包括利用cancel()方法终止任务执行及系统垃圾回收策略的应用。
743

被折叠的 条评论
为什么被折叠?



