首页技术文章正文

Java面试:乐观锁和悲观锁分别是什么?

更新时间:2020-05-26 来源:黑马程序员 浏览量:

1577370495235_学IT就到黑马程序员.gif


乐观锁

乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。

Java中的乐观锁基本都是通过CAS操作实现的,CAS 是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。

 

悲观锁

悲观锁是就是悲观思想,即认为写多,遇到并发写的可能性高,每次去拿数据的时候都认为别人会修改,所以每次在读写数据的时候都会上锁,这样别人想读写这个数据就会block直到拿到锁。

Java中的悲观锁就是Synchronized,AQS框架下的锁则是先尝试cas乐观锁去获取锁,获取不到,才会转换为悲观锁,如 RetreenLock。

以上我们介绍了java中的乐观锁和悲观锁的概念希望对你有所帮助,如果想系统学习和提升java技术能力,推荐了解黑马程序员中级java程序员培训课程。


在黑马程序员学java是什么感受?下面我们通过一个视频来感受。

1590050011625_咨询课程小.jpg


猜你喜欢:

Java中sleep方法与wait方法的区别

Java中volatile关键字有什么作用?

Java编程思想

分享到:
在线咨询 我要报名
和我们在线交谈!