Timer类的主要作用是设置计划任务,但封装任务的却是TimerTask类。
1.Timer.schedule(TimerTask task,Date time):在指定日期执行某一次任务。
任务执行完进程不会销毁,创建1个Timer就是启动一个新的线程,该线程不是守护线程,会一直运行下去。
方案:Timer timer = new Timer(true);//设置其为守护线程
2.Timer中允许多个TimerTask任务
TimerTask是以队列的方式一个一个执行的,所以预期的执行时间可能和真实的执行时间不一样。可能前面的任务耗时过长,那么后面的任务运行时间也会被延后。
3.Timer.schedule(TimerTask task,Date firstTime,long period):在指定日期之后的间隔周期,无限循环的执行某一个任务。
ps,若计划时间早于当前时间,则立即执行task任务。
4. TimerTask的cancel():将自身从任务队列中清楚,其他任务不受影响。
Timer类的cancel():将任务队列中的所有任务清空。ps,并一定会马上停止所有任务,原因在于Timer类中的cancel()有时并没有争抢到queue锁,而让TimerTask类中的任务继续执行。
5.Timer.schedule(TimerTask task,long delay):在当前时间的基础上延迟多长时间执行任务。
6.Timer.schedule(TimerTask task,long delay,long period):在当前时间的基础上延迟多长时间执行任务,再以某一时间间隔执行任务。
7.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
schedule方法和scheduleAtFixedRate方法都是按顺序执行的,所以不用担心非线程安全的问题。
schedule方法和scheduleAtFixedRate方法的区别在于:
schedule不具有追赶性;
scheduleAtFixedRate具有追赶性,即如果计划时间早于当前时间,这个时间段内的task会被“补充性”的执行下。
Timer可以用于Android技术中,实现类似于轮询、动画等功能。