赞
踩
要安全的修改同一行数据,就要保证一个线程在修改时其它线程无法更新这行记录。
一般有悲观锁和乐观锁两种方案~
悲观锁思想就是,当前线程要进来修改数据时,别的线程都得拒之门外~比如,可以使用 select…for update ~
select * from User where name=‘abc’ for update
以上这条 sql语句会锁定了 User表中所有符合检索条件(name=‘abc’)的记录。本次事务提交之前,别的线程都无法修改这些记录。
乐观锁思想就是,有线程过来,先放过去修改,如果看到别的线程没修改过,就可以修改成功,如果别的线程修改过,就修改失败或者重试。
实现方式:乐观锁一般会使用版本号机制或 CAS算法实现。
悲观锁她专一且缺乏安全感了,她的心只属于当前事务,每时每刻都担心着它心爱的数据可能被别的事务修改,所以一个事务拥有(获得)悲观锁后,其他任何事务都不能对数据进行修改啦,只能等待锁被释放才可以执行。
乐观锁的“乐观情绪”体现在,它认为数据的变动不会太频繁。因此,它允许多个事务同时对数据进行变动。实现方式:乐观锁一般会使用版本号机制或 CAS算法实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。