几种定时调度的介绍与实现

由需求产出的一篇文章,憋了很久。以下将会看到,使用Timer进行任务调度,用ScheduledExecutor和Calendar实现任务调度,Spring中的任务调度TaskScheduler,开源工具包Quartz的简单介绍。

使用Timer任务调度

Timer是java.util.Timer提供的比较简单的调度工具,实现任务调度的核心是Timer和TimerTask。其中Timer负责在schedule方法中设定TimerTask任务,以及任务执行的起始时间delay和间隔执行的时间period;TimerTask负责创建需要调度的任务,开发者需要实现run方法,然后将其丢给Timer去执行即可。

Java线程池

虽然之前学习了不少相关知识,但是只有在实践中踩坑才能印象深刻。今天看了半天的java对线程池的处理,额外兴致来,总结一份java线程池相关。

大O表示法

前面有两篇总结了排序算法,最近刚好在看《算法图解》,想由表及里整理一份算法系列。每次介绍算法时,都会讨论其运行时间,一般而言,应选择效率最高的算法,以最大限度地减少运行时间或占用空间。那怎么表示算法的速度呢,今天来了解一下:大O表示法。

理解大O表示法

大O表示法是一种特殊的表示法,指出了算法的速度有多快。我们举个例子:假设列表包含n个元素,简单的查询需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为:O(n)。单位?没有,大O表示法指的是算法运行时间的增速,不需要单位来描述。

你所忽视的排序算法(下)

你所不知道的排序算法下篇更新啦,相比于上篇介绍的,下篇的几种排序算法相对来说比较少见。最近也花了一点时间来理解。话不多说,我们进入正文。

今天出场的是:快速排序,堆排序,计数排序,桶排序。

你所忽视的排序算法(上)

算法(algorithm),在数学(算学)和计算机科学之中,为任何良定义的具体计算步骤的一个序列,常用语计算,数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。

——维基百科

程序猿圈子里似乎都默然这样的一个等式:程序=数据结构+算法。思考起来,就感觉相当于:作文=语法+词语。这句话相当出名,因为这是1986年尼古拉斯赵四(逃)在获得图灵奖时说的一句话,现在听起来,似乎没有什么不正确的。当然,这就好比当年牛顿在1687年提出万有引力一样,现在看起来是废话一样,但是当时这句话确定奠定了程序的基础概念。

相见

分享几个简短的思考和观点。

关于代码

「为了理解一个简单函数的运行过程,今天的软件工程师可能需要追踪25个文件。因为每个文件都包含一个 Java 方法,它会向另一个文件的另一个方法发消息。为了方便查看20层的堆栈,人们发明了 Eclipse 那样的复杂工具。实际做事的那一行代码,埋藏在数百行胶水代码、无数个接口和其他冗余代码之下。」

Philip Greenspun,麻省理工学院的计算机教授