首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测对java对象的并发访问

检测对java对象的并发访问
EN

Stack Overflow用户
提问于 2020-05-22 22:57:37
回答 1查看 153关注 0票数 0

我有一个关于java中并发访问的问题。

项目上下文如下: JSF 2.1;Richfaces 4,hibernate 3.6,spring 3.2,java 7。

我有一个表格,里面显示了几十万个文件夹(每个文件夹都是一个java对象),每个表行都是一个动态链接,可以访问查询或修改的对象(文件夹)。

我的问题是:如何防止多个用户查看或编辑文件夹?

换句话说,如何同时检测多个用户对文件夹(对象java)的访问?

我知道在方法上使用同步这个词可以防止并发访问,但我想要检测并发访问,以警告其他用户或其他用户文件夹(java对象)已经打开,我们必须等待它关闭。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-06-26 19:30:04

同步和所有其他的锁定/阻塞方法只会阻止代码内部的并发访问。

它不会阻止两个用户同时编辑相同的“东西”。这是你必须自己放入你的代码中的东西。

有两种最常见的方法来实现这一点:

  • Optimistic Locking:您假设,即使多个用户查看相同的项目,也不会同时有多个更改。因此,您只需在保存时检查是否存在并发修改。要做到这一点:
    • 有问题的对象需要一个时间戳,即它最后一次修改的时间。
    • 一旦用户打开要查看的项目,您就将该时间戳存储在会话上下文中。
    • 如果用户单击“保存”,则将会话上下文时间戳与实际对象的时间戳进行比较。如果它们相同,则可以保存更改。如果对象在两者之间进行了修改,则需要显示一条错误消息,指出该对象已被修改,并且如果不加载新的基值prior.

,则无法保存更改

  • Pessimistic Locking:您假设,每当用户查看对象时,都会有更改。要实现这一点:
    • 有问题的对象需要一个Int- Flag,它当前正在被编辑(由任何人-Flag=UserID)
    • 一旦第二个用户试图加载该对象,你就拒绝了,因为这里的原因是清除“锁”,如果编辑用户没有通过应用程序方法“中止”就退出页面。要处理此问题,您需要定义一个锁定时间戳,定义一些超时值(例如30分钟),并进行两次检查:
      • 编辑用户在保存时是否超过了超时值?他不能再存钱了。(作为额外的允许稍后保存,如果对象尚未被中间的其他人锁定,请使用
      • -user-id来确定)
      • 对象已锁定,但锁定时间超过30分钟?第二个用户可以再次打开,声明himself.

的锁用户id

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61957850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档