【多线程面试题十八】、说一说Java中乐观锁和悲观锁的区别

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

面试官:说一说Java中乐观锁和悲观锁的区别

参考答案:

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。Java中悲观锁是通过synchronized关键字或Lock接口来实现的。

乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁适用于多读的应用类型,这样可以提高吞吐量。在JDK1.5 中新增 java.util.concurrent (J.U.C)就是建立在CAS之上的。相对于对于 synchronized 这种阻塞算法,CAS是非阻塞算法的一种常见实现。所以J.U.C在性能上有了很大的提升。

相关推荐
常年游走在bug的边缘几秒前
掌握JavaScript作用域:从函数作用域到块级作用域的演进与实践
开发语言·前端·javascript
jiaguangqingpanda5 分钟前
Day36-20260204
java·开发语言
ctyshr10 分钟前
C++编译期数学计算
开发语言·c++·算法
tb_first12 分钟前
万字超详细苍穹外卖学习笔记4
java·spring boot·笔记·学习·spring·mybatis
打码的猿14 分钟前
Qt对话框不锁死主程序的方法
开发语言·qt
努力写代码的熊大28 分钟前
c++异常和智能指针
java·开发语言·c++
山岚的运维笔记32 分钟前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver
Yvonne爱编码33 分钟前
JAVA数据结构 DAY5-LinkedList
java·开发语言·python
千秋乐。36 分钟前
C++-string
开发语言·c++
孞㐑¥38 分钟前
算法—队列+宽搜(bfs)+堆
开发语言·c++·经验分享·笔记·算法