谈谈定时器(Timer)的使用
过去的半年,陆陆续续看过不少新同学写的代码,自己也写了不少代码。在这过程中,还是有不少感触的。我们知道,定时器(Timer)在程序中的是非常有用的一种utility。今天这篇文章,就结合自己看代码、写代码过程中的一些经验,来谈谈定时器的使用,包括基本的用法,还有使用过程中的一些误区。
在介绍定时器的使用之前,先简单介绍一下常见的定时器的实现。通常,定时器的是由一个单独的线程+一个最小堆来实现的。单独的线程基本上保证定时事件不被其他事件而阻塞,能够及时调度到,从而保证定时器的在时间上的“准确性”;用最小堆来做为核心的数据结构,主要是为了性能考虑,以时间为key,这样堆顶的元素就是最先到期的,因此每次check的时候,直接从堆顶开始check, 只到遇到第一个没到期的元素为止,这里的复杂度与在堆里的元素个数无关,可以看作是O(1)的,因此性能上还是比较有保障的。
接下来说说定时器的基本用法,通常情况下,定时器有两类主要的应用:一类是周期性的执行某个指定的动作;一类是延后特定的时间,执行指定的动作。第一类我们通常叫周期性定时器(PeriodTimer),第二类叫一次型定时器(OneshotTimer) 。 阅读全文…
近期评论