Java多线程编程核心技术3——定时器Timer

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任务。

  1. 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技术中,实现类似于轮询、动画等功能。

作者:有奶喝先森
链接:http://www.jianshu.com/p/e3b817ef664a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。