Java中定时器功能有哪些好的实现方案?
想实现一个功能,需要定期查看一个表,并发送消息。
在Java中,有哪些好的实现方案?资源耗费情况如何?容错能力好的有哪些?
请高手支招。
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
想实现一个功能,需要定期查看一个表,并发送消息。
在Java中,有哪些好的实现方案?资源耗费情况如何?容错能力好的有哪些?
请高手支招。
谢谢。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
用 Quartz 进行作业调度
对于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,通过标注方式实现,方便简单
spring task , 如果你在用spring的话
如果是简单的定时调度,使用Timer就够了,如果复杂的调度任务,可以考虑使用Quartz,容错能力要看你写的代码了,不管使用哪种方式,Timer和Quartz都是稳定的。