关于定时器扫描数据库,根据数据库的值去想webservice定时发送,求高手给个思路

[b][b][/b][/b]现在有这样一个需求,有表A 字段col_a;现在我需要用定时器去定期扫描表A中的数据,根据字段col_a的值来做些逻辑操作!:
col_a的值有0,1,2,3,4,5
如果为0:则等待15分钟把这条数据向一个webservice发送数据
如果为1:则等待一个小时把这条数据向一个webservice发送数据
如果为2:则等待4个小时钟把这条数据向一个webservice发送数据
如果为3:则等待8个小时把这条数据向一个webservice发送数据
如果为4:则等待12个小时把这条数据向一个webservice发送数据
(上面逻辑如果15分钟发送的失败col_a更新为1,一个小时发送失败col_a更新为2 以此类推,发送五次。如果一次成功则后面操作不需要做!如果五次都不成功则视为失败)
现在我想要些思路!我想等待用object.wait();但是这样会不会出现一个问题,当我一个还在wait的时候,定时器又扫描表又要发送数据,有什么好的办法!或者有什么能锁定数据呢!求给些思路

我觉得还是用伪代码表示比较方便:
1. scan thread: List col_a_list = get col_a record from db
scan thread: stop;
for (String col_a: col_a_list) {
int time = getTime(col_a);//get time based on col_a
startTimer(time, new WebServiceThread());
update db record of col_a to tell make it not eligible for the scan thread.
}

  1. WebServiceThread:

If success {
update db record of col_a to tell make it not eligible for the scan thread.
} else if (col_a == 4) {
update db record of col_a to tell make it not eligible for the scan thread.
} else {
update col_a = col_a + 1;
}

典型TOP-K算法

您上面的算法应该在线程中调用sleep进行休眠而不是去等待。因为,等待如果不唤醒是不会重新运行的。

根据你定时发送的特点,可以把定时发送时间定为15分钟一次。每次扫描出来的值,都放进一个数据库表或者队列,15分钟去检查一次决定是否发送就可以了。