Java的Timer和TimerTask怎么结束

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结果如下
Java的Timer和TimerTask怎么结束_第1张图片
当注释掉两个System.gc()后,结果如下
Java的Timer和TimerTask怎么结束_第2张图片
当注释掉两个cancel()后,结果如下
Java的Timer和TimerTask怎么结束_第3张图片

你可能感兴趣的:(Java)