如何从Java代码编写乐观和悲观锁定
Posted
技术标签:
【中文标题】如何从Java代码编写乐观和悲观锁定【英文标题】:How to code optimistic and pessimistic locking from java code 【发布时间】:2012-01-31 06:39:56 【问题描述】:我知道乐观锁和悲观锁是什么,但是当你写一个java代码时你是怎么做的呢?假设我在 Java 中使用 Oracle,我在 JDBC 中是否有任何方法可以帮助我做到这一点?我将如何配置这个东西?任何指针将不胜感激。
【问题讨论】:
Java 锁定和 JDBC 与您所寻找的方式无关。您要解决的问题是什么? Java 锁是可重入锁,可以通过使用“同步”关键字获得。那么,您到底在寻找什么? 我正在寻找数据库锁定 【参考方案1】:您可以通过这种方式在您的 DB 表中实现乐观锁(这就是在 Hibernate 中完成乐观锁的方式):
-
将整数“版本”列添加到您的表中。
每更新对应的行,就增加该列的值。
要获得锁,只需读取行的“版本”值。
在 where 子句中添加“version = getting_version”条件
您的更新声明。更新后验证受影响的行数。
如果没有行受到影响 - 有人已经修改了您的条目。
你的更新应该是这样的
UPDATE mytable SET name = 'Andy', version = 3 WHERE id = 1 and version = 2
当然,这种机制只有在各方都遵循它的情况下才有效,这与 DBMS 提供的不需要特殊处理的锁相反。
希望这会有所帮助。
【讨论】:
【参考方案2】:假设我在 Java 中使用 Oracle,我在 JDBC 中是否有任何方法可以帮助我做到这一点?
This Oracle paper 应该会为您提供一些有关如何执行此操作的提示。
没有特定的 JDBC 方法。相反,您可以通过设计 SQL 查询/更新以及放置事务边界的位置来实现乐观锁定。
【讨论】:
以上是关于如何从Java代码编写乐观和悲观锁定的主要内容,如果未能解决你的问题,请参考以下文章