我正在学习JPA悲观的锁。我找到了以下解释
PESSIMISTIC_READ -实体被锁定在数据库上,阻止任何其他事务获取PESSIMISTIC_WRITE锁。 PESSIMISTIC_WRITE -该实体被锁定在数据库上,防止任何其他事务获取PESSIMISTIC_READ或PESSIMISTIC_WRITE锁。
如果我正确理解,那么如果我们有三个用户(A,B,C)和用户A获得读锁,那么用户B也可以获得读锁,但是用户C不能获得写锁,直到用户A和B释放他们的锁。如果用户A获得了写锁,那么在用户A释放锁之前,用户B和用户C无法获得任何信息。
但是,对于我的客户机-服务器应用程序,我需要以下逻辑。如果用户只想读取一个实体,他们就以只读模式打开该实体(无限数量的用户可以同时这样做)。如果某个用户想编辑实体,他会以写模式打开它--没有人可以在写模式下打开同一个实体(直到用户释放写锁为止),但所有其他用户仍然可以以只读模式打开该实体。
我有两个问题:
发布于 2019-07-04 22:08:37
我对JPA悲观锁的理解对吗?
是的,这正是读写锁的工作方式
...but所有其他的仍然可以以只读模式打开实体。
我不太明白你的意思。我们仍然在讨论多个同时执行的事务,对吗(我有一种奇怪的感觉,这不是您的意思)?如果是这样的话,那么在您的逻辑中,持有'READ_ONLY‘锁就什么都没有。
锁定意味着‘我冻结了这个资源,以便某些其他事务在我完成之前不能继续’。但是,在您描述的逻辑中,当您持有'READ_ONLY‘锁时,既允许持有'READ_ONLY’锁的事务,也允许持有'WRITE‘锁的事务继续进行。
https://stackoverflow.com/questions/56893973
复制相似问题