首页 > Java中定时器功能有哪些好的实现方案?

Java中定时器功能有哪些好的实现方案?

想实现一个功能,需要定期查看一个表,并发送消息。
在Java中,有哪些好的实现方案?资源耗费情况如何?容错能力好的有哪些?

请高手支招。

谢谢。


对于java本身提供的功能来说, 就是Timer 和 ScheduledThreadPoolExecutor了.

我找了这个网页:
http://dumb-coder.blogspot.sg/2012/10/timer-vs-scheduledthreadpoolexecutor.html

和我一直的理解是一致的. 每一个Timer对应一个后台线程, 其接收到的TimerTasker 被放入队列中(具体实现应该是一个小顶堆). 适合少量的, 短的任务.

如果要处理多个, 长时间的任务, 并且对时间 和 并行处理有要求的, 用ScheduledThreadPoolExecutor.


如果在Java EE环境下, 还可以考虑EJB timer
http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

以前用过, 印象最深的就是 1). 可以和transaction一起用, 如果事务回滚, timer的创建/取消也会回滚. 2). persistent. 应用服务器重启后, timer不会丢失.


  1. java自带的java.util.Timer
  2. Spring3.0以后的task
  3. 开源项目Quartz

spring task , 如果你在用spring的话


用 Quartz 进行作业调度

Quartz 是个开放源码项目,提供了丰富的作业调度集。在这篇文章中,软件工程师 Michael Lipton 和 IT 架构师
Soobaek Jang 对 Quartz API 进行了介绍,从对框架的一般概述开始,并以一系列展示 Quart
基本特性的代码示例作为结束。在阅读完本文并看过代码示例后,您应当能够把 Quartz 的基本特性应用到任何 Java™ 应用程序中。


如果是简单的定时调度,使用Timer就够了,如果复杂的调度任务,可以考虑使用Quartz,容错能力要看你写的代码了,不管使用哪种方式,Timer和Quartz都是稳定的。


几种任务调度的 Java 实现方法与比较
http://user.qzone.qq.com/1769617251/2


    推荐使用Spring的task,通过标注方式实现,方便简单
    <task:executor id="executor" pool-size="5" />
<task:scheduler id="scheduler" pool-size="10" />
<task:annotation-driven executor="executor" scheduler="scheduler" />
【热门文章】
【热门文章】