首先,乐观锁和悲观锁都属于数据库层次控制并发问题
悲观锁 一锁就锁定了数据(整表或者一行数据) 其他所有的需求查询等都不能进来,使得请求队列不断加长,对于交互十分不友好
乐观锁:
乐观锁大多是通过数据库版本(version)记录机制实现的,即为数据增加一个版本标识,在基于数据库表的解决方案中,一般是
在表中增加一个version字段来实现,读取数据时将版本号一起读取,在
更新操作
时将版本号加1,将提交的数据的版本号和数据库中
的数据版本号进行比较,若大于数据库中数据的版本号,则提交更新数据,否则认为是过期数据,无法提交,抛出异常。
例如 hibernate:
在 Stu.hbm.xml 中的 的class节点中 加上
optimistic-lock="version"
并在id节点后 加上
<version column="version" name="version" type="java.lang.Long" />
或 在实体类 Stu.class中
只需要在version上面添加 @Version注解