版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/84246528
1. Timer类
Timer类主要用于设置计划任务,TimerTask用于实现任务。
public class ThreadTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("TimerTask");
}
};
timer.schedule(task, 0);
}
}
任务虽然执行完了,但进程还未销毁,原因就在于Timer启动了一个线程。
public Timer(String name, boolean isDaemon) {
thread.setName(name);
thread.setDaemon(isDaemon);
thread.start();
}
-
设置
Timer(boolean isDaemon)
为守护进程,当主进程结束时,自动结束。Timer timer = new Timer(true);
调用TimerTask.cancel()
和Timer.cancel()
方法来取消任务。调用TimerTask.cancel()
方法会停止任务的执行,但不会影响整个Timer的执行。
2. 主要方法
Timer的主要方法
schedule(TimerTask task, Date time)
,在指定日期执行一次任务。schedule(TimerTask task, Date firstTime, long period)
,在指定日期之后按指定的间隔周期,无限循环地执行某一任务。schedule(TimerTask task, long delay)
,以当前时间为参考时间,在此时间基础上延迟指定的毫秒数执行一次任务。schedule(TimerTask task, long delay, long period)
,以当前时间为参考时间,在此时间基础上延迟指定的毫秒数之后,按指定的间隔周期,无限循环地执行某一任务。scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
,在指定日期之后按指定的间隔周期,无限循环地执行某一任务。scheduleAtFixedRate(TimerTask task, long delay, long period)
,以当前时间为参考时间,在此时间基础上延迟指定的毫秒数之后,按指定的间隔周期,无限循环地执行某一任务。cancel()
,取消所有任务。
TimerTask的主要方法
run()
,运行本次任务cancel()
,取消本次任务
schedule
和scheduleAtFixedRate
的区别
schedule
会保证任务的间隔是按照定义的period参数严格执行的,如果某一次调度时间比较长,那么后面的时间会顺延,保证调度间隔都是period。scheduleAtFixedRate
是严格按照调度时间来的,如果某次调度时间太长了,那么会通过缩短间隔的方式保证下一次调度在预定时间执行。
例如执行一个3秒的循环任务,第一次任务执行了4秒,第二次执行了1秒。schedule
的执行时间为0, 4, 7, 10, 13, …,而scheduleAtFixedRate
的执行时间为0, 4, 6, 9, 12, …。