想实现一个功能,需要定期查看一个表,并发送消息。
在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不会丢失.
推荐使用Spring的task,通过标注方式实现,方便简单
<task:executor id="executor" pool-size="5" />
<task:scheduler id="scheduler" pool-size="10" />
<task:annotation-driven executor="executor" scheduler="scheduler" />
15 回答8.1k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
用 Quartz 进行作业调度