乐观锁与悲观锁
乐观锁
顾名思义,就是很乐观
,每次去拿数据的时候都认为别人不会修改
,所以不会 上锁,但是在更新
的时候会判断一下在此期间别人有没有去更新
这个数据, 可以使用版本号等机制
。乐观锁适用于多读
的应用类型,这样可以提高吞吐 量,像数据库提供的类似于write_condition机制,其实都是提供的乐观 锁。在Java中java.util.concurrent.atomic包下面的原子变量类
就是 使用了乐观锁的一种实现方式CAS实现的。
悲观锁
总是假设最坏
的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿 数据的时候都会上锁
,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的 关系型数据库
里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁
等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized
关键字的实现也是悲观锁
。
Last updated
Was this helpful?