乐观锁与悲观锁

Posted gdsddf

tags:

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

 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。

  乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量.

 

悲观锁机制存在以下问题:  

1. 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。

2. 一个线程持有锁会导致其它所有需要此锁的线程挂起。

3. 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。

 

乐观锁是一种思想。

相对悲观锁而言,乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。

 

 技术分享图片

 

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

面试必备----------------乐观锁与悲观锁

[初级]深入理解乐观锁与悲观锁

MYSQL悲观锁与乐观锁

乐观锁与悲观锁

乐观锁与悲观锁

悲观锁与乐观锁