java中关于数据的倒计时?

java中关于数据的倒计时

需求:用户提出申请,如果提出申请24小时候没有回应,即时打回申请。要求即时,相当与每条申请有一个计时器。

有什么方法,可以实时监控数据,是否到了时间点?

不要说什么一个小时扫描一次这样的做法,只求能即时反应的

0

6个回答

可以这样做

首先执行查询数据库里离现在时间最近一条需要提醒的数据
计算出当前时间到要提醒的时间的时间间隔S1

启动一个线程,让这个线程睡眠S1左右时间,然后叫醒该线程去发送通知,并重新查询数据库取得下一条离现在时间最近的一条需要提醒数据
计算时间间隔S2,
让线程继续睡觉S2左右的时间,~~~

如此

同时,如果有新数据添加,或修改或删除,
重新计算离现在时间最近一条需要提醒的数据时间间隔S3
将正在睡觉的线程主动叫醒但不发送通知,
修改线程睡觉时间s3,
然后线程继续睡觉S3时间自动醒来,,

重复执行通知,睡觉等一系列动作~~~~

0

JDK自带的Timer和TimerTask可以解决你的问题。
为每一个申请起一个定时器,24个小时后查询申请状态,没有回应的打回。然后销毁这个定时器

0

这个一般就两种方法嘛
要么是每隔一定时间扫描一次,你要及时的话每隔1分钟扫一次。
要么就是为每一条申请制定一个计划,到时间执行。

资源占用的话,应该是比较大的。第一种方式是占内存多,第二种方式是CPU占用高。时间和空间的关系。

0

用Quartz试试看。可以把待完成的作业存到数据库里,下次启动服务器时装载。

0

[code="java"]用Quartz吧 :lol:
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站:http://www.opensymphony.com/quartz
[/code]
[url]http://blog.csdn.net/szwangdf/article/details/6158646[/url]

0

[quote]1.如果数据量很大,那么这个发生的速度会不会很大。。。
2.目前系统有集群部署。在生产环境中有多个应用服务器(难道要专门找一个服务器弄这个?)[/quote]

1.数据量大,你用其他方式一样也是需要考虑性能问题 的

2.像QUATZ,定时器等也是通过产生一个线程(记得是这样的),定时执行,而我的让个只是让线程睡觉去,而且不是依靠定时执行,而是通过计算时间距离来执行的~~~
他们都很单独拿出来,不然在集群里都有可能发生重复发送通知 的

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!