论坛首页 Java企业应用论坛

大家讨论一下关于 定时执行某一程序 的实现思路吧!

浏览 10311 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-03-05  
在我参与的项目中,会碰到这样一种需求:
比如内部文件交流模块,大家可以相互发送一些文件,这些文件存储在数据库中,与个人信息绑定,当这些文件存储超过一定的时间,比如2周,系统会自动将这些文件删除。

请教这个程序怎样实现比较好,效率高?
   发表时间:2004-03-05  
用一个Timer类应该可以解决这个问题,实现一个daemon线程。
0 请登录后投票
   发表时间:2004-03-05  
如果你有jdon的源程序,可以看看它里面的关于定时更新索引功能的实现. DbSearchManager.java + TimerEngine.java
0 请登录后投票
   发表时间:2004-03-06  
有很多种方法,触发器也是可选的呀.
Timer这个方法也可以呀.
在ejb2.1中消息bean中也有了这个机制.

或者自己做一个程序,例如:一个servlet,每隔一段时就激活.
或者也可以用 任务(windows中的任务管理)+程序.
0 请登录后投票
   发表时间:2004-03-06  
用Timer执行TimeTask就可以了,TimeTask中启动多个线程(尤其工作量比较大的时候),不要用deamon线程,它是后端运行,不能进行跟踪,也无法主动杀死的,很容易出问题(自然也不方便调试)。
   初始化执行Timer的程序最好是Singleton的,例如Servlet就是一个不错的选择。
0 请登录后投票
   发表时间:2004-03-08  
为什么不使用 deamon ?典型应用阿
0 请登录后投票
   发表时间:2004-03-09  
开始在考虑这个问题时,感觉最终使用Observer模式也许是一个不错的选择,
可是一直不能确定 thread 的 wait(long t)方法是不是一个好选择,
因为,当thread调用wait()方法后,线程被阻滞,进入block队列,等待long t
时间后,被激活,不太清楚的是这段等待时间,虚拟机是如何计算,然后激活线程的。

在看完jive的实现后,发现jive也使用了wait ()方法,而且实现方法和Observer也比较相似
Subject 及其子类-> Timer和TimerEngine
Observer -> Runnable
Observer子类 -> DbSearchManager

感觉就是这样。
pw:thatway说的 jive 的实现我看了1天才弄明白,领悟能力还需提高。
0 请登录后投票
   发表时间:2004-03-09  
简单的需求用Timer,复杂的用quartz
不用自己重复发明轮子......
0 请登录后投票
   发表时间:2004-03-09  
我上个项目就做了一个这样的定时器,也用了Observer模式,当然,在我所需要的线程中不需要去考虑wait,其实我也用过,但是一直报错,至今都没有搞清原因,所以我直接用sleep,呵呵,然后通过一中间对象进行状态的监控。超时后,Observer就会自动把线程杀死。(不用deamon的原因,是deamon的线程不受程序控制,你无法杀死,同时没有办法捕捉到它的状态。)原来Jive里面已经有好的应用了,呵呵,早知道就看看了。
   楼上说的quartz是什么东东,有没有文档?
0 请登录后投票
   发表时间:2004-03-09  
http://www.quartzscheduler.org/quartz/
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics