首页 > 其他 > 详细

乐观锁和悲观锁

时间:2019-11-03 11:50:13      阅读:77      评论:0      收藏:0      [点我收藏+]

一、乐观锁:

1. 总是假设最好的情况,进行业务操作的时候不加锁

2. 只有在更新操作时,才回去判断数据是否被别的线程更新过

3. 适合读操作比较多的场景,提高系统吞吐量;写操作比较多的场景会降低性能

4. 实现方式

a. 版本号或者时间戳:表里多加一列作为标记,先读取标记,更新的时候也更新标记,如果发现版本号不是刚才读取的数据,说明被其他线程更新过,做异常处理

b. CAS:无锁编程,但会有ABA问题

 

二、悲观锁:

1. 总是假设最坏的情况,每次操作数据的时候,都会假设别的线程会修改数据,就先获取锁,再进行业务操作

2. 读数据的情况也加锁,系统吞吐量比较低;适合写操作比较多的场景

3. 关系型数据库实现:行锁、表锁、读锁、写锁

4. Java实现:synchronized、Lock

 

 

参考:

https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484911&idx=1&sn=1d53616437f50b353e33edad6fda2e4f&source=41#wechat_redirect

 

乐观锁和悲观锁

原文:https://www.cnblogs.com/june0816/p/10029425.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!