有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程Oracle Java如何锁定一行,以便其他进程无法读取它?

我有一个用例,从表中读取一组记录,对其执行一些操作,然后更新记录。我希望在这段时间内,没有其他应用程序/组件能够读取记录。这是因为我希望在多台主机上运行同一个应用程序以实现可伸缩性,但不希望出现竞争条件。我的应用程序使用一些SQS更改事件,并将它们应用于oracle存储。请建议使用什么机制。在这种情况下会选择更新工作吗


共 (1) 个答案

  1. # 1 楼答案

    “选择更新”会锁定该行,并保留该行供您更新,但不会阻止其他人阅读该行。我想你可能需要重新考虑这个想法。假设一个表中的所有报告或所有查询都有不一致的数字,这取决于有多少人碰巧在查看某些数据,而不管他们是否决定更新它

    或者,如果其他用户查询但看不到该行,他们是否会尝试插入该行,而您最终会遇到唯一键约束或处理重复数据

    或者,如果我查询某个东西一次并看到它,然后重新查询,它就会消失,因为有人查询了它——我对这个应用有多大信心

    如果有人去度假却忘了关闭应用程序——给其他人留下一周的“失踪”行,会发生什么

    你可能想研究乐观锁定来应对比赛条件。是的,这是一项需要努力实现的工作,但总比拥有一个交付不一致结果的应用程序要好!或者,您可以在两种模式下工作屏幕——显示和编辑。用户单击“编辑”,然后重新获取更新,进行编辑,然后提交更改或放弃编辑。然而,这种技术的使用越来越少,因为如果事务未解决,它通常会使行甚至整个表处于锁定状态,这可能需要DBA干预来修复