gpt4 book ai didi

java - 并发 : Only one user editing an item at a time

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:35 25 4
gpt4 key购买 nike

一段时间以来,我一直在研究如何解决这个问题,但似乎找不到合适的解决方案。

问题是:

我有一个 Java EE 应用程序,许多用户可以在其中登录,他们会看到一个项目列表,他们可以选择和编辑其中的任何一个。

所有用户看到相同的项目列表。如前所述,他们可以编辑项目,但我想将编辑功能限制为一个用户。也就是说,许多用户可以同时编辑不同的项目,但只有一个用户可以编辑特定项目。

当一个用户正在编辑一个项目时,应该向任何其他试图编辑该项目的用户显示一条消息。

我通过在项目上设置一个标志 inUse 为 true 来实现这一点,然后检查它。当用户通过单击保存或取消完成对项目的编辑时,该标志将设置为 false。这种方法的问题是要考虑用户打开浏览器或关闭浏览器的情况。

我尝试设置 session 超时,但似乎无法正常工作,因为当 session 超时时,我无法访问该项目。我只能访问 httprequest session ID。

也许这是错误的方法,因为它似乎是许多应用程序都会遇到的问题,应该存在一个不那么骇人听闻的解决方案。

我研究过使用线程和同步方法,但不知道它是如何工作的,因为一旦用户进入编辑项目屏幕,该方法就会退出并释放锁。

我找到了这个解决方案 Only one user allowed to edit content at a time但不确定这是否是使用 Java 的方式。

是否有更优雅/java 的解决方案?如果是这样,你能指出我正确的方向吗?您将如何实现?

谢谢!

解决方法:虽然最初我认为乐观锁定是可行的方法,但我很快意识到它并不适合我的环境。我决定结合使用悲观锁定 (http://www.agiledata.org/essays/concurrencyControl.html#PessimisticLocking) 和超时。

当访问一个项目时,我将一个 inUse 字段设置为 true,并将该对象的上次访问字段设置为当前时间。

每当有人试图编辑对象时,我都会检查 inUse 字段和 lastAccessed 字段 + 5 分钟。所以基本上,我给 5 分钟来编辑用户。

最佳答案

像在数据库中那样做,使用时间戳。时间戳与记录一起保存,当一个人提交他的编辑时,除非时间戳相同,否则编辑不会通过(意思是“自从我阅读此记录以来没有发生任何编辑”)。然后当编辑完成时,会创建一个新的时间戳。

关于java - 并发 : Only one user editing an item at a time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954442/

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