gpt4 book ai didi

Java - MDB - 如何避免并发问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:55 25 4
gpt4 key购买 nike

我们实现了 MDB,它可以并行处理用户输入和处理。我们对用户数据进行限制检查(例如用户可以拥有的电话号码数量)。

我面临的问题是两个不同的线程获取相同用户的数据并进行处理。第一个线程很好,它检查限制并将手机正确添加到用户配置文件中。第二个线程也做同样的事情。但限制检查发生在第一个线程提交事务之前,因此限制检查通过。但已经突破极限了。

有什么办法可以解决吗?让同一线程选取一个用户的数据就可以了。但我不知道该怎么做。

请帮忙。提前致谢。

编辑:还有一件事我没有传达。当它在不同的节点上运行时,就会出现此问题。

最佳答案

这取决于应用程序服务器、节点数量和应用程序,但以下场景对我来说是可以的:

  • Weblogic 或 JBOSS 支持订单单位功能:

Message Unit-of-Order is a WebLogic Server value-added feature that enables a stand alone message producer, or a group of producers acting as one, to group messages into a single unit with respect to the processing order. This single unit is called a Unit-of-Order and requires that all messages from that unit be processed sequentially in the order they were created.

  • 如果您更新同一条记录,第一个线程获取锁,而第二个线程等待事务提交,则第二个线程应该检查更新(乐观锁),并且它可以立即退出。

例如。

Thread 1: lastUpd = now() 
Thread 1: UPDATE MYTABLE SET LAST_UPDATE=${lastUpd} WHERE ID=${id}
Thread 2: lastUpd = now()
Thread 2: UPDATE MYTABLE SET LAST_UPDATE=${lastUpd} WHERE ID=${id} //remain locked
Thread 1: a lot of work ...
Thread 1 COMMIT
Thread 2: a lot of work ...
Thread 2: lastUpd2= SELECT LAST_UPDATE MYTABLE WHERE ID=${id}
Thread 2: IF lastUpd2!= lastUpd ROLLBACK

关于Java - MDB - 如何避免并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com