集群中多线程如何处理表中的数据的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集群中多线程如何处理表中的数据的问题相关的知识,希望对你有一定的参考价值。

1)场景:

 网站向消息平台发送消息,消息平台将其保单到数据库中;

 后台有多台服务器进行集群,这种情况下就会出现多线程同时获取到同一条消息进行处理的问题?如何解决:


2)具体方案,如下的sql即可解决。

   //定义一张qtz_locks表,用来做控制锁使用。

   //for update:代表给你查询出的记录添加锁

   //nowait: 代表如果获取不到数据不等待直接抛出异常退出

   select * from qrtz_locks_ex where lock_name=‘CALENDAR_ACCESS‘ and group_name=‘EPCISNBA‘for update nowait;

   select * from proddata.marketproduct_info mi where mi.marketproduct_code=‘MP02000138‘and mi.status=‘1‘;

    

   1)在你处理的代码中首先执行第一条sql,获取控制锁;然后再执行你的查询,进行状态的修改,处理完成后在释放控制锁;

   2)这样,在你进行操作前,都必须获取控制锁,才能继续操作,否则就中断,抛出异常。这样就可以做到同一条件记录只能被一条线程所操作。

   


以上是关于集群中多线程如何处理表中的数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java中多线程问题

C#多线程如何处理数据

如何处理表视图单元格中的全部打开/全部关闭,每个单元格在 iOS Swift 中具有查看更多/查看更少选项

如何处理keras中多变量LSTM的多步时间序列预测

Java中多线程等待通知示例中的线程连接(1)用法

sql PostgreSQL:如何处理表和视图依赖项