🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
🔥 联系方式vx:zsqtcc
乐观锁与悲观锁的区别?
🤞这次都给他拿下🤞
正菜来了⛳⛳⛳
🎈乐观锁
何为乐观锁:在获取资源的时候,认为资源不会被其他线程争抢,所以就不会真正的加锁。
常用的有两种解决方案:
一种是CAS的使用:因为某个线程在对资源进行操作的时候,通过不断循环的方式对资源进行修改,如果没有被其他线程占用,则就修改成功,如果有其他线程争抢,修改失败后继续循环修改,知道修改成功。
另一种是使用版本锁stampedLock,在获取资源的时候不是真正的加锁,而是当前修改的时候,记录一个版本号,如果修改的时候版本号没有变化,说明没有其他线程争抢,如果版本号发生变化,表明其他线程争抢,则就需要再次记录版本号后再次尝试修改。
🎈悲观锁
那悲观锁又是?,在获取资源的时候,认为资源会被其他线程争抢,所以在获取资源对资源修改的时候,会先加上锁,再进行操作。
常见的锁有
sychronized:属于JVM的,是一个关键字,基于monitor的,是非公平锁,加锁的时候包含一个锁升级的过程,从无锁->偏向锁->轻量级锁->重量级锁,具体的可以查看我的其他文章,这里就不展开了。
ReentryLock:属于API的,既可以实现公平锁,也可以是公平锁,基于AQS的,阻塞状态可中断,需要手动加锁和释放锁。
🍚总结
以上就是关于乐观锁和悲观锁的简单总结,希望有所帮助。