Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:读锁是如何工作的?_Java_Jpa_Concurrency_Locking_Optimistic Locking - Fatal编程技术网

Java JPA:读锁是如何工作的?

Java JPA:读锁是如何工作的?,java,jpa,concurrency,locking,optimistic-locking,Java,Jpa,Concurrency,Locking,Optimistic Locking,我试图理解调用EntityManager.lock(entity,LockModeType.READ)的效果。API文档听起来让我很困惑 如果我必须并发线程并且线程1调用lock(entity,LockModeType.READ),那么线程2仍然可以读写该实体吗 到目前为止,我学到的是: JPA1中读取的锁类型与JPA2中的乐观类型相同。如果设置了这样的锁,EntityManager会在提交事务之前检查version属性,但不会更新它。我找到了乐观锁定模式的解释:。搜索乐观(读取)锁定模式示例。

我试图理解调用EntityManager.lock(entity,LockModeType.READ)的效果。API文档听起来让我很困惑

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

到目前为止,我学到的是:

JPA1中读取的锁类型与JPA2中的乐观类型相同。如果设置了这样的锁,EntityManager会在提交事务之前检查version属性,但不会更新它。我找到了乐观锁定模式的解释:。搜索乐观(读取)锁定模式示例。 据我所知,在线程1中设置读锁对线程2没有影响。。。N所有其他线程仍然可以读取和写入实体。但当线程1中的事务提交且另一个线程更新了实体时,线程1中的事务将回滚


我的理解正确吗?

无论如何,Read现在已经被弃用,但只是为了您的理解:

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

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

也有乐观的阅读,这是使用它的现代方式(也有写)

更新


好的,这对我理解希望很有帮助。

我还是不明白。有人可以重组句子或添加一个例子吗?我更新了我的答案,请检查我提供的链接