问题描述
[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<String> col_a_list = get col_a record from dbscan 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.}2. 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;}
解决方案二:
根据你定时发送的特点,可以把定时发送时间定为15分钟一次。每次扫描出来的值,都放进一个数据库表或者队列,15分钟去检查一次决定是否发送就可以了。
解决方案三:
您上面的算法应该在线程中调用sleep进行休眠而不是去等待。因为,等待如果不唤醒是不会重新运行的。
解决方案四:
典型TOP-K算法