加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPA:Read Lock如何工作?

发布时间:2020-12-15 03:11:47 所属栏目:Java 来源:网络整理
导读:我试图了解调用EntityManager.lock(entity,LockModeType.READ)的效果. API文档对我来说听起来很混乱. 如果我必须并发线程并且线程1调用lock(实体,LockModeType.READ),那么线程2是否仍然可以读写实体? 到目前为止我学到了什么: JPA1中的锁定类型READ与JPA2
我试图了解调用EntityManager.lock(entity,LockModeType.READ)的效果. API文档对我来说听起来很混乱.

如果我必须并发线程并且线程1调用lock(实体,LockModeType.READ),那么线程2是否仍然可以读写实体?

到目前为止我学到了什么:

JPA1中的锁定类型READ与JPA2中的OPTIMISTIC相同.如果设置了此类锁,则EntityManager会在提交事务之前检查版本属性,但不会更新它.我找到了OPTIMISTIC锁定模式的解释:Link.搜索OPTIMISTIC(READ)LockMode示例.
正如我所理解的那样,在线程1中设置读锁定对线程2 … n没有影响.所有其他线程仍然可以读写实体.但是当线程1中的事务提交而另一个线程已更新实体时,线程1中的事务将被回滚.

我理解这是对的吗?

解决方法

无论如何,只是为了您的理解而阅读是非常弃用的:

READ锁将确保对象的状态在提交时不会更改,因为READ锁允许其他事务更新或删除它然后如果线程1进行一些更改然后提交它首先检查状态(版本)实体如果检查,则提交,如果不是,则不允许,

所以基本上你的理解是正确的.

还有OPTIMISTIC_READ这是使用它的现代方式(也有_WRITE).

UPDATE

好的,article帮助我理解希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读