面试优化:乐观锁与悲观锁的区别与应用场景

发布时间:2025-01-05 23:54

智能门锁的密码解锁与指纹识别 #生活技巧# #居家实用技巧# #智能生活设备使用#

何谓悲观锁与乐观锁

乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生

活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以

场景而定说一种人好于另外一种人。

悲观锁

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿

数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资

源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线

程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁

等,读锁,写锁等,都是在做操作之前先上锁。Java 中 synchronized 和

ReentrantLock 等独占锁就是悲观锁思想的实现。

乐观锁

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上

锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以

使用版本号机制和 CAS 算法实现。乐观锁适用于多读的应用类型,这样可以提

高吞吐量,像数据库提供的类似于 write_condition 机制,其实都是提供的乐

观锁。在 Java 中 java.util.concurrent.atomic 包下面的原子变量类就是使用了

乐观锁的一种实现方式 CAS 实现的。

两种锁的使用场景

从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一

种,像乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的

时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果是多写的

情况,一般会经常产生冲突,这就会导致上层应用会不断的进行 retry,这样反

倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。

乐观锁常见的两种实现方式

乐观锁一般会使用版本号机制或 CAS 算法实现。

网址:面试优化:乐观锁与悲观锁的区别与应用场景 https://www.yuejiaxmz.com/news/view/652166

相关内容

锁策略及优化总结
人生观—读《乐观与悲观》(转载)范本一份
乐观主义和悲观主义的区别
悲观主义与乐观主义知乎
关于悲观和乐观的名言大全
悲观的人如何变得乐观
2024年高考作文备考:乐观与悲观的两种人生观写作范文
悲观式乐观主义
乐观与悲观:如何培养积极的生活态度?
悲观的人怎样才能变得乐观?

随便看看