现在的业务是,多线程从消息队列里读取数据,然后从数据库中判断数据是否存在,再做其它处理。
现在的问题是,多个线程读取后,一个线程可能还在处理过程中,另一个线程又进来了,怎么处理这样的情况?
请指教
没太看明白你的场景,你前面数据库判断是否存在那么不就可以做限制了么?比如数据字段加时间戳,最后执行完后更新结果时带上时间戳条件,如果没更新到代表已经被其他线程执行过了。
同步
如何同步?
加把锁 机制或者是定义一个全局静态变量 标志是否还有线程执行。
这种一般是从业务上控制不要同时多个现成处理同一笔业务。
乐观锁 和事务 更新的时候带着这条记录一起更新
如果这条记录已经更新了 那么会报错 让其他的更新一起 更新不上去
如果这条记录没有更新 那么更新成功