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

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

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

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

💒 公众号:知识浅谈

🔥 联系方式vx:zsqtcc

乐观锁与悲观锁的区别?

🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈乐观锁

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

常用的有两种解决方案:

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

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

🎈悲观锁

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

常见的锁有

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

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

🍚总结

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

相关文章
|
SQL Oracle 关系型数据库
Oracle分组取最大值
Oracle分组取最大值
|
机器学习/深度学习 存储 算法
小样本问题
【10月更文挑战第1天
689 0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
181 0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
|
监控 Cloud Native 持续交付
云原生技术:构建现代应用的新范式
【10月更文挑战第9天】 随着云计算技术的不断成熟,云原生技术正迅速成为现代应用开发和部署的新标准。云原生不仅是一种技术,更是一种理念和实践方法,旨在最大化利用云计算的优势,提升应用的灵活性、可扩展性和弹性。本文将深入探讨云原生的核心概念、关键技术以及它如何改变我们构建和运行应用程序的方式。
329 0
|
存储 缓存 NoSQL
网页设计,若依项目修改(It must be done)04在线用户展示---仅仅从Redis取一下数据做展示,查看若依存储的资料,用RDM
网页设计,若依项目修改(It must be done)04在线用户展示---仅仅从Redis取一下数据做展示,查看若依存储的资料,用RDM
vue3中的父子间传值
vue3中的父子间传值
181 0
|
存储
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
607 0
FPGA-SDRAM设计学习(三)初始化、模式寄存器、激活和读命令
|
测试技术
Pytest----失败N次后停止执行
Pytest----失败N次后停止执行
577 0

热门文章

最新文章