JAVA乐观锁悲观锁实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA乐观锁悲观锁实现相关的知识,希望对你有一定的参考价值。

一、名词解释

  1、悲观锁:认为每次对数据库的操作(查询、修改)都是不安全的,因此每次操作都会把这条数据锁掉,直到本次操作完毕释放该锁

  2、乐观锁:查询数据的时候总是认为是安全的,不会锁数据;等到更新数据的时候会判断这个数据是否被人修改过,如果有人修改过了则本次修改失败

二、使用过程

  1、悲观锁:悲观锁的内部实现是采用的数据库内部的锁机制,一个典型的依赖数据库的悲观锁调用:

    SELECT * FROM TABLE WHERE ID=‘1‘ FOR UPDATE;

    这条语句锁定了TABLE表总id=‘1‘的这条数据,本次事务提交之前(事务提交后会释放事物终的锁)外界无法修改本条记录,同时也保证了本条数据的准确性;

   悲观锁缺陷:如果在高并发的情况下,每条数据都排队按照以上过程去加锁、运行、解锁,那么可想而知执行时间,等待时间是非常长的,用户体验是非常差的

  2、乐观锁:乐观锁的实现方式有两种:1是添加version字段每次修过叠加;2是使用updatetime每次更新数据后系统自动更新

    UPDATE TABLE SET NAME=‘DD‘ WHERE UPDATETIME=‘查询出的时间‘AND ID=‘1‘

    UPDATETIME也可换成version 在where条件加上这两天自动更新字段,如果不符合说明有改动

   乐观锁缺陷:如果修过特别频繁冲突特别多的情况下会导致很多操作都失败

以上是关于JAVA乐观锁悲观锁实现的主要内容,如果未能解决你的问题,请参考以下文章

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

Java-悲观锁和乐观锁

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

乐观锁悲观锁

悲观锁与乐观锁以及如何用java语言和mysql实现