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()后,结果如下