Java中的定时器Timer详解

【Java中的定时器Timer详解】Java中的定时器Timer详解,博智网带你了解详细信息 。
目录

  • 总结

简单来说,定时器就相当于一个“闹钟”,给定时器设定一个任务,约定这个任务在xxx时间之后执行~
Timer类提供了一个核心接口,schedule(安排)指定一个任务交给定时器,在一定时间之后再去执行这个任务~
如何实现定时器的效果~
  • Timer中要包含一个Task类,每个Task就表示一个具体的任务实例,Task里面包含一个时间戳(啥时候执行这个任务),还包含一个Runnable实例(用来表示任务具体是啥) 。
  • Timer里面通过一个带优先级的阻塞队列,来组织如干个task 。
  • 这里的优先级是按照时间的先后来排优先级,快要到时间的任务优先级更高 。
  • 也就是 给 堆 加上 wait/notify,让它能够带阻塞效果 。
  • 标准库里提供这样的队列PriorityBlockingQueue
  • Timer 中还需要一个专门的线程,让这个线程不停的扫描队首元素,看看队首元素是不是已经可以执行了,如果可以执行了,就执行,反之继续在队列中等待 。
具体如何用代码实现这样一个定时器Timer:
一般去设定时间的时候,传入的时间,都是一个时间间隔
例如:传入1000,就代表从当前开始过1000ms之后在执行;
而我这里为了后面代码方便判断,在这里记录一下绝对时间,这样this.time里就是一个标志的ms级时间戳了,后续只需要获取当前时间戳在和这里的time对比一下就好了 。

Java中的定时器Timer详解


Java中的定时器Timer详解


Java中的定时器Timer详解


Java中的定时器Timer详解


Java中的定时器Timer详解


Java中的定时器Timer详解


Java中的定时器Timer详解


Java中的定时器Timer详解


这里补充一下Timer原生类中的一些方法
  • schedule(TimerTask task, Date time)在指定的日期执行一次TimerTask任务;如果日期time早于当前时间,则立刻执行 。
  • schedule(TimerTask task, long delay, long period)以当前时间为基准,延迟指定的毫秒后,再按指定的时间间隔地无限次数的执行TimerTask任务 。
  • schedule(TimerTask task, Date firstTime, long period)在指定的日期之后,按指定的时间间隔地无限次数的执行TimerTask任务 。
  • scheduleAtFixedRate(TimerTask task, long delay, long period)以当前时间为基准,延迟指定的毫秒后,再按指定的时间间隔周期性地无限次数的执行TimerTask任务 。

总结本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注趣讯吧的更多内容!

    推荐阅读