锁住它,快告诉我乐观锁与悲观锁的区别?

简介: 锁住它,快告诉我乐观锁与悲观锁的区别?

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家

📌 擅长领域:全栈工程师、爬虫、ACM算法

💒 公众号:知识浅谈

🔥 联系方式vx:zsqtcc

乐观锁与悲观锁的区别?

🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈乐观锁

何为乐观锁:在获取资源的时候,认为资源不会被其他线程争抢,所以就不会真正的加锁。

常用的有两种解决方案:

一种是CAS的使用:因为某个线程在对资源进行操作的时候,通过不断循环的方式对资源进行修改,如果没有被其他线程占用,则就修改成功,如果有其他线程争抢,修改失败后继续循环修改,知道修改成功。

另一种是使用版本锁stampedLock,在获取资源的时候不是真正的加锁,而是当前修改的时候,记录一个版本号,如果修改的时候版本号没有变化,说明没有其他线程争抢,如果版本号发生变化,表明其他线程争抢,则就需要再次记录版本号后再次尝试修改。

🎈悲观锁

那悲观锁又是?,在获取资源的时候,认为资源会被其他线程争抢,所以在获取资源对资源修改的时候,会先加上锁,再进行操作。

常见的锁有

sychronized:属于JVM的,是一个关键字,基于monitor的,是非公平锁,加锁的时候包含一个锁升级的过程,从无锁->偏向锁->轻量级锁->重量级锁,具体的可以查看我的其他文章,这里就不展开了。

ReentryLock:属于API的,既可以实现公平锁,也可以是公平锁,基于AQS的,阻塞状态可中断,需要手动加锁和释放锁。

🍚总结

以上就是关于乐观锁和悲观锁的简单总结,希望有所帮助。

相关文章
|
消息中间件 负载均衡 物联网
乐刻运动:基于 RocketMQ + MQTT 实现健身产业数字化升级
乐刻运动通过采用阿里云的云消息队列 RocketMQ 版和云消息队列 MQTT 版,不仅提升了系统的实时数据处理能力,还增强了系统的可扩展性、可靠性和性能,为业务的持续发展和流畅的用户体验,提供了坚实的技术支持,进一步推动了数字经济与健身产业的深度融合。
492 87
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
499 69
|
机器学习/深度学习 存储 算法
小样本问题
【10月更文挑战第1天
525 0
|
Linux 持续交付 调度
HTTPS 证书自动化运维:https证书管理系统-自动化部署
本指南介绍如何部署Linux服务器节点。首先复制生成的Linux脚本命令,然后将其粘贴到目标服务器上运行。接着刷新页面查看节点记录,并点击“配置证书”选择证书以自动部署。最后,节点部署完成,后续将自动调度,无需人工干预。
HTTPS 证书自动化运维:https证书管理系统-自动化部署
|
存储
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
524 0
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
阿里云商标注册教程:新手自助申请详细步骤
阿里云商标注册图文教程快速上手笔记,本文以阿里云商标智能注册申请为例,商标智能注册申请需要用户手动填写商标类型、商标名称、商标图样、商标说明及商标分类表选择等操作,流程较为复杂,TM83商标网来详细说下阿里云商标注册快速上手笔记
1281 1
阿里云商标注册教程:新手自助申请详细步骤
|
存储 编解码 边缘计算
阿里云视频点播服务介绍|学习笔记
快速学习阿里云视频点播服务介绍
阿里云视频点播服务介绍|学习笔记
|
SQL 消息中间件 移动开发
使用MyBatisPlus实现多租户功能
使用MyBatisPlus实现多租户功能
使用MyBatisPlus实现多租户功能
|
存储 编译器 C语言
【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
941 0