美文网首页
Java多线程编程核心技术3——定时器Timer

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

作者: 有奶喝先森 | 来源:发表于2017-02-17 11:04 被阅读0次

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

    相关文章

      网友评论

          本文标题:Java多线程编程核心技术3——定时器Timer

          本文链接:https://www.haomeiwen.com/subject/pyrtwttx.html