问题描述
java中关于数据的倒计时需求:用户提出申请,如果提出申请24小时候没有回应,即时打回申请。要求即时,相当与每条申请有一个计时器。有什么方法,可以实时监控数据,是否到了时间点?不要说什么一个小时扫描一次这样的做法,只求能即时反应的 问题补充:redstarofsleep 写道
解决方案
可以这样做首先执行查询数据库里离现在时间最近一条需要提醒的数据计算出当前时间到要提醒的时间的时间间隔S1启动一个线程,让这个线程睡眠S1左右时间,然后叫醒该线程去发送通知,并重新查询数据库取得下一条离现在时间最近的一条需要提醒数据计算时间间隔S2,让线程继续睡觉S2左右的时间,~~~如此同时,如果有新数据添加,或修改或删除,重新计算离现在时间最近一条需要提醒的数据时间间隔S3将正在睡觉的线程主动叫醒但不发送通知,修改线程睡觉时间s3,然后线程继续睡觉S3时间自动醒来,,重复执行通知,睡觉等一系列动作~~~~
解决方案二:
引用1.如果数据量很大,那么这个发生的速度会不会很大。。。 2.目前系统有集群部署。在生产环境中有多个应用服务器(难道要专门找一个服务器弄这个?)1.数据量大,你用其他方式一样也是需要考虑性能问题 的2.像QUATZ,定时器等也是通过产生一个线程(记得是这样的),定时执行,而我的让个只是让线程睡觉去,而且不是依靠定时执行,而是通过计算时间距离来执行的~~~他们都很单独拿出来,不然在集群里都有可能发生重复发送通知 的
解决方案三:
用Quartz吧 :lol: Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站:http://www.opensymphony.com/quartzhttp://blog.csdn.net/szwangdf/article/details/6158646
解决方案四:
用Quartz试试看。可以把待完成的作业存到数据库里,下次启动服务器时装载。
解决方案五:
这个一般就两种方法嘛要么是每隔一定时间扫描一次,你要及时的话每隔1分钟扫一次。要么就是为每一条申请制定一个计划,到时间执行。资源占用的话,应该是比较大的。第一种方式是占内存多,第二种方式是CPU占用高。时间和空间的关系。
解决方案六:
JDK自带的Timer和TimerTask可以解决你的问题。为每一个申请起一个定时器,24个小时后查询申请状态,没有回应的打回。然后销毁这个定时器