乐观锁和悲观锁

倾然丶 夕夏残阳落幕 提交于 2019-12-03 09:26:16

一、乐观锁:

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!